本文是对SQL相关内容的一个梳理。首先SQL语言的分类主要有四大类
DDL数据定义语言:
关键字有CREATE、ALERT、DROP创建一个新的表或者表的视图或者对象;
- 操作数据库
创建:create database mydb2 character set gbk COLLATE gbk_chinese_ci;
查询:show create database mydb2;
修改:alter database mydb2 character set utf8;
删除:drop database mydb2;
其他:select database(); //查看当前使用的数据库
use mydb3; //切换使用的数据库 - 操作数据表
语法:
create table 表名(
字段1 字段类型,
字段2 字段类型,
…
字段n 字段类型
);
DML数据操作语言:
主要有INSERT、UPDATE、DELETE对应对表中的数据进行增,改,删除;
- 插入操作:
语法: INSERT INTO 表名(列名1,列名2 …)VALUES(列值1,列值2…);
注意:列名与列值的类型、个数、顺序要一一对应;
值不要超出列定义的长度
如果插入空值,请使用null
插入的日期和字符一样,都使用引号括起来。 - 修改操作:
语法:UPDATE 表名 SET 列名1=列值1,列名2=列值2 。。。 WHERE 列名=值 - 删除操作:
语法 : DELETE FROM 表名 [WHERE 列名=值]
DCL数据控制语言:
用于授予或收回数据库的某些权限或事务提交。
GRANT:授权;ROLLBACK [WORK] TO [SAVEPOINT]:回退到某一点。
DQL数据查询语言:
由SELECT子句WHERE子句FROM子句构成的查询块。
数据查询语言不会修改数据,而是将查询的结果集返回到客户端。
语法:
SELECT selection_list /*要查询的列名称 */
FROM table_list /*要查询的表名称 */
WHERE condition /*行条件 */
GROUP BY grouping_columns /*对结果分组 */
HAVING condition /*分组后的行条件 */
ORDER BY sorting_columns /*对结果分组 */
LIMIT offset_start, row_count /*结果限定 */
基础查询
- 查询所有列 SELECT * FROM stu;
- 查询指定列 SELECT sid, sname, age FROM stu;
条件查询
条件查询即再WHERE子句中,同时WHERE子句中可以使用如下关键字:
- =、!=、<>、<、<=、>、>=;
- BETWEEN…AND;
- IN(set);
- IS NULL; IS NOT NULL;
- AND;OR;NOT;
eg:
查询性别为女,并且年龄50的记录
SELECT * FROM stu WHERE gender=‘female’ AND ge<50;
查询学号为S_1001,S_1002,S_1003的记录
SELECT * FROM stu WHERE sid IN (‘S_1001’,‘S_1002’,‘S_1003’);
模糊查询
当想查询姓名中包含a字母的学生时就需要使用模糊查询了。模糊查询需要使用关键字LIKE。其中通配符有:
- _ 任意一个字符 ‘张_’
- %:任意0~n个字符 ‘%张%’
字段控制查询
- 去重:DISTINCT关键字
SELECT DISTINCT sal FROM emp; - 查询某几列的和:这几列都是数值类型的时候可以相加
SELECT *,sal+comm FROM emp; - 添加别名: as关键字
聚合函数
用来做纵向运算的函数
- COUNT():统计指定列不为NULL的记录行数;
MAX():计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算; - MIN():计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;
- SUM():计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;
- AVG():计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;
分组查询
当需要分组查询时需要使用GROUP BY子句,例如查询每个部门的工资和,这说明要使用部门来分组。
- GROUP BY子句
查询每个部门的部门编号和每个部门的工资和:
SELECT deptno, SUM(sal) FROM emp GROUP BY deptno; - HAVING子句
查询工资总和大于9000的部门编号以及工资和:
SELECT deptno, SUM(sal) FROM emp GROUP BY deptno HAVING SUM(sal) > 9000;
LIMIT
SELECT * FROM emp LIMIT x, y;
从x行起查询y行记录。
查询语句书写顺序:select – from- where- group by- having- order by-limit
查询语句执行顺序:from - where -group by - having - select - order by-limit