SQL相关指令整理


SQL是用于数据库查询,删改等的一种语言,方便对数据库进行操作。本文主要讲述MySQL下的SQL相关指令。 每一行指令结束记得写分号;

DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE)
DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT)
DCL—数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK)

1 表

数据库管理着表以及表和表之间的关系,表中存储着数据,我们绝大多数的操作也都是针对于表。

数据表由行(row)和列(column)组成,是一个二维的网格结构。每个列都是一个字段,每一行是一个记录。字段由字段名称和字段的数据类型以及一些约束条件组成。

常见的约束条件:
NOT NULL:该字段的值不能为空
PRIMARY KEY: 主键,有唯一约束,不能为空,
FOREIGN KEY:外键,数据表2中索引数据表1中主键的键
NOT NULL: 非空约束
UNIQUE : 唯一约束
DEFAULT :如果插入数据时没有给该字段赋值,则使用默认值

1.1 数据类型

常见的数据类型有数值型,字符串类型和日期时间类型:

数值型

  • 整数型
    - TINYINT 非常小的整数
    - SMALLINT 小整数
    - MEDIUMINT 中等大小的整数
    - INT 正常大小的整数
    - BIGINT 大整数
  • 浮点型(近似值)
    - FLOAT 一个小的(单精度)浮点数
    - DOUBLE 正常大小(双精度)浮点数
  • 定点型(精确值)
    - DECIMAL 定点数

字符串型

  • CHAR
  • VARCHAR
    CHAR(X)的长度确定,VARCHAR(X)的长度可变,当X=5时,对于CHAR若输入一个字符,会用空格补齐
  • BINARY
  • VARBINARY
  • BLOB
  • TEXT
  • ENUM
  • SET

日期时间类型

  • TIME
  • DATE
  • DATETIME
  • TIMESTAMP
  • YEAR

1.2表的创建

对于postgresSQL,创表的时候必须显示定义主键。对于MySQL,当创建表时没有显示定义主键时。首先判断表中是否有非空的整形唯一索引,如果有,则该列为主键(这时候可以使用 select _rowid from table 查询到主键列);如果没有符合条件的则会自动创建一个6字节的主键(该主键是查不到的).

所以创表的时候还是应该显示定义主键。

CREATE TABLE <table_name> (
column_name1 type1,
column_name2 type2,
...
column_nameN typeN
); 
#例:
CREATE TABLE IF NOT EXISTS user(
id INT,
account VARCHAR(50) NOT NULL,
name VARCHAR(20) NOT NULL,
age INT,
gender ENUM('male','female','unknown') DEFAULT 'unknown',
PRIMARY KEY(id)#如果多个字段组合成一个主键,用逗号隔开。
#也可以在定义id时直接写成 id INT PRIMARY KEY
);

1.3 表的删除

DROP TABLE <table_name>;
);
#例
DROP TABLE user;

1.4 表的修改

使用ALTER TABLE。
1)加入column

ALTER TABLE <table_name>
ADD <definition_of_column>;
#例:
ALTER TABLE user
ADD married BINARY;

2)删除column

ALTER TABLE <table_name>
DROP COLUMN <column_name>;
#例:
ALTER TABLE user
DROP COLUMN married;

3)修改字段类型

ALTER TABLE <table_name>
MODIFY COLUMN <definition_of_column>;
#例:
ALTER TABLE user
MODIFY COLUMN married VARCHAR(5);

2 数据的处理

2.1 插入数据

直接插入
未经赋值的字段为NULL,当不指明要赋值的字段列表时,自动依次对应录入

INSERT INTO <table_name> (<要赋值的字段的有序列表>) VALUES (
<要赋值的列表,逗号隔开>
); 
#例:
INSERT INTO user (id,account,name,age,gender) VALUES (
1,"橘子鸭血粉丝汤","clemence",18,"male"
); 

向表2中根据表1选出的内容进行插入

INSERT INTO <table_name> (<要赋值的字段的有序列表>) 
SELECT column1,..column2
FROM <table_name2>
(WHERE <限制条件>); 
#例:
INSERT INTO user (id,account,name)
SELECT id,account
FROM user2
WHERE id=1; 

2.2 更新记录

UPDATE <table_name>
SET <column1=value1,..,columnN=valueN>
(WHERE <限制条件>); 
#例:
UPDATE user
SET name='clementine'
WHERE id=1; 

2.3 删除记录

当仅有DELETE FROM时,删除所有column里的值

DELETE FROM <table_name>
(WHERE <限制条件>); 
#例:
DELETE FROM user
WHERE id=1; 

3 其他指令语言

3.1 SELECT

想要删除重复项时,使用SELECT DISTINCT

SELECT <name_of_columns>
FROM <table_name>
(WHERE <restriction>#---选择所有字段内数据---
SELECT *
FROM <table_name>
(WHERE <restriction>#例
SELECT id,name
FROM user
WHERE id=1

3.2 WHERE

以下的运算符可以在WHERE中使用:

运算符 描述 举例
= 等于 WHERE id=1
<> 不等于。注释:在 SQL 的一些版本中,该操作符可被写成 != WHERE id<>1
> 大于 WHERE id>1
< 小于 WHERE id<1
>= 大于等于 WHERE id>=1
<= 小于等于 WHERE id<=1
BETWEEN 在某个范围内 WHERE id BETWEEN 1 AND 5
IN 某个列的多个可能值 WHERE id IN (1,3,4)
LIKE 模糊查询搜索某种模式 WHERE id LIKE ‘M%’

M 为要查询内容中的模糊信息:

  • % 表示多个字值,_ 下划线表示一个字符;
  • M% : 正则表达式,查询以 M 开头的所有内容。
  • %M% : 查询只包含M的所有内容。
  • %M_ : 查询以M在倒数第二位的所有内容

多个查询条件可以使用AND,OR来连接。

3.3 AS

重命名column。

SELECT <column1> AS <a1>, <column2> AS <a2>
FROM <table_name>
(WHERE <restriction>);
#例
SELECT id AS identifiant, account AS account_name
FROM user;

3.4 ORDER BY

对选择出的记录进行排序,DESC为从大到小排序,ASC为从小到大排序,默认为ASC。DESC 或者 ASC 只对它紧跟着的第一个列名有效,其他不受影响,仍然是默认的从小到达排序。

ORDER BY 多列的时候,先按照第一个column name排序,再对第一次排序好的各同属部分分别按照第二个column name排序

SELECT <column1>, <column2>
FROM <table_name>
(WHERE <restriction>)
ORDER BY <column_names>;
#例
SELECT id, account, name
FROM user
ORDER BY id,name DESC #先按id从小到大排序,再按照name从大到小排序
#或
ORDER BY id DESC,name #先按id从大到小排序,再按照name从小到大排序
ORDER BY id DESC, name DESC 等价于 ORDER BY CONCAT(code,name) DESC #先按id从大到小排序,再按照name从大到小排序

3.5 GROUP BY

使用GROUP BY一定要遵循single value rule:

  1. 跟在SELECT后的column,要么出现在了GROUP BY后面, 要么在聚合函数里
  2. 如果GROUP BY的column是键,则SELECT后别的column可以不遵循上述原则(但最好不要这样)
SELECT <column1,...,聚合函数(columnN)>
FROM <table_name>
(WHERE <restriction>)
GROUP BY <column1>

可以使用的聚合函数有:

  • COUNT()
  • AVG()
  • SUM()
  • MIN()
  • MAX()

3.6 HAVING

用于筛选成组后的各种数据,可以在HAVING中使用聚合函数,但不能在WHERE中使用聚合函数。

SELECT <column1,...,聚合函数(columnN)>
FROM <table_name>
(WHERE <restriction>)
GROUP BY <column1>
HAVING <condition>
#例
SELECT Company.name,AVG(Person.age)
FROM Company, Person
WHERE Company.name=Person.ComName
GROUP BY Company.name
HAVING Company.type IN ('technologie','environment')

SQL中指令调用的顺序为:
FROM->WHERE->GROUP BY->HAVING->SELECT->ORDER BY

4 多表操作

4.1 多表的JOIN连接

INNER JOIN 可以简写为JOIN,LEFT OUTR JOIN 可以简写为LEFT JOIN,RIGHT OUTER JOIN 可以简写为RIGHT JOIN。

SELECT * 
FROM T1,T2
WHERE T1.C=T2.X;
#等价于
SELECT * 
FROM T1 INNER JOIN T2
ON T1.C=T2.X;

在这里插入图片描述

4.2 自连接

SELECT * 
FROM T T1, T T2
WHERE T1.X=T2.X;

4.3 UNION

UNION:R1和R2的被选出的columns的数量要一致,最后的结果会删除重复值。如果不想删除重复值可以使用UNION ALL

SELECT * FROM T1
UNION
SELECT * FROM T2

猜你喜欢

转载自blog.csdn.net/weixin_46148223/article/details/109108984