数据操作语言(DML) # SELECT 列名称 FROM 表名称 WHERE 列 运算符(=,!=,>等) 值 - 从数据库表中获取数据 # UPDATE 表名称 SET 列名称 = 新值,列名称2 = 新值2 WHERE 列名称 = 某值 - 更新数据库表中的数据 # DELETE - 从数据库表中删除数据 # INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....) - 向数据库表中插入数据
数据定义语言(DDL) # CREATE DATABASE - 创建新数据库 # ALTER DATABASE - 修改数据库 # CREATE TABLE - 创建新表 # ALTER TABLE 表名 MODIFY/ADD COLUMN 字段名 字段类型 - 变更(新增)数据库表字段 # DROP TABLE 表名 - 删除表 # ALTER TABLE - 表名 # ADD INDEX 索引名称(对应的字段) - 创建索引(搜索键) # ALTER TABLE 表名 DROP INDEX 索引名称 - 删除索引
查询中用到的关键词主要包含六个,并且他们的顺序依次为 select--from--where--groupby--having--orderby
其中select和from是必须的,其他关键词是可选的,这六个关键词的执行顺序 与sql语句的书写顺序并不是一样的,而是按照下面的顺序来执行- from:需要从哪个数据表检索数据
- where:过滤表中数据的条件
- group by:如何将上面过滤出的数据分组
- having:对上面已经分组的数据进行过滤的条件
- select:查看结果集中的哪个列,或列的计算结果
- order by :按照什么样的顺序来查看返回的数据
LIKE操作符
SELECT column_name(s) FROM table_name WHERE column_name (NOT) LIKE pattern -- patten格式:%替换一个或者多个字符,例如City LIKE 'N%'或者City LIKE '%N%'
IN操作符
SELECT column_name(s) FROM table_name WHERE column_name IN (value1,value2,...)
BETWEEN操作符
SELECT column_name(s) FROM table_name WHERE create_time BETWEEN '2020-01-01 12:00:00' AND '2020-12-31 23:59:59' -- 等价于 SELECT column_name(s) FROM table_name WHERE create_time >= '2020-01-01 12:00:00' AND create_time <= '2020-12-31 23:59:59'
SQL ALIAS 别名
-- 表别名(其中as可以省略) SELECT column_name(s) from table_name as alias_name; -- 列别名(其中as可以省略) select column_name as alias_name from table_name;
SQL JOHN
-- JOIN: 如果表中有至少一个匹配,则返回行 -- LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行 -- RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行 -- FULL JOIN: 只要其中一个表中存在匹配,就返回行例如:SELECT column_name(s) FROM table_name1 INNER JOIN table_name2 ON table_name1.column_name=table_name2.column_name -- mysql中table_name1,table_name2相当于inner join,两边都得有匹配才返回常用的是inner join(两边匹配)和left join(单边匹配,同来优化not in)
SQL UNION
UNION 内部的每个 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每个 SELECT 语句中的列的顺序必须相同。
-- UNION 会对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序 -- UNION ALL 对两个结果集进行并集操作,包括重复行,不会对结果进行排序。 SELECT column_name(s) FROM table_name1 UNION SELECT column_name(s) FROM table_name2;
SQL SELECT INTO
-- SQL SELECT INTO 语句可用于创建表的备份复件。 SELECT * INTO new_table_name [IN externaldatabase] FROM old_tablename -- 等价于 SELECT * INTO new_table_name [IN externaldatabase]SELECT 对应的字段 FROM old_tablename
SQL约束
判断某个字段是否为NULL的写法:无法使用比较运算符来测试 NULL 值,比如 =, <, 或者 <>。我们必须使用 IS NULL 和 IS NOT NULL 操作符
NOT NULL -- 约束强制列不接受 NULL 值。NOT NULL 约束强制字段始终包含值。这意味着,如果不向字段添加值,就无法插入新记录或者更新记录。 UNIQUE -- 约束唯一标识数据库表中的每条记录。UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。PRIMARY KEY 拥有自动定义的 UNIQUE 约束。请注意,每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。 PRIMARY KEY -- 约束唯一标识数据库表中的每条记录。主键必须包含唯一的值。主键列不能包含 NULL 值。每个表都应该有一个主键,并且每个表只能有一个主键。 FOREIGN KEY -- 一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY,实际项目禁止这种写法,具体可以参见SQL规范 CHECK CHECK -- 约束用于限制列中的值的范围。如果对单个列定义 CHECK 约束,那么该列只允许特定的值。如果对一个表定义 CHECK 约束,那么此约束会在特定的列中对值进行限制。 DEFAULT 约束用于向 -- 列中插入默认值。如果没有规定其他的值,那么会将默认值添加到所有的新记录。
括号
-- 有时候有多个表join,为了表达清晰,可以使用括号,但是这个可能导致索引不生效: SELECT k.相应字段, m.字段 FROM (SELECT 相应字段 FROM 表1,表2 WHERE 表1.字段1=表2.字段2 GROUP BY 某个字段 limit 0,100 ) k , 表3 m WHERE k.某个字段=m.某个字段
SELECT DISTINCT 列名称 FROM 表名称 -- 返回唯一不同的值 LENGTH(某个字段) MAX(某个字段) MIN(某个字段) COUNT(某个字段) SUM(某个字段) DATE_FORMAT(date字段, 对应的格式) CONACT(字段1,字段2) -- 连接字符串