SELECT 语句详解
搭建数据库
source /home/shiyanlou/Desktop/SQL4/MySQL-04-01.sql
source /home/shiyanlou/Desktop/SQL4/MySQL-04-02.sql
基本语句
打印表中所有信息
SELECT * FROM table_name;
#打印出符合条件的信息
SELECT 要查询的列名 FROM 表名字 WHERE 限制条件;//条件可以包括><,=
IN/NOT IN(在或不在)
SELECT name,age,phone,in_dpt FROM employee WHERE in_dpt IN ('dpt3','dpt4');
SELECT name,age,phone,in_dpt FROM employee WHERE in_dpt NOT IN ('dpt1','dpt3');
LIKE(通配符)
指定个数 _
SELECT name,age,phone FROM employee WHERE phone LIKE '1101__';
不指定个数 %
SELECT name,age,phone FROM employee WHERE name LIKE 'J%';
按升降序排序 ORDER
#降序
SELECT name,age,salary,phone FROM employee ORDER BY salary DESC;
#升序(也可以不写ASE默认升序)
SELECT name,age,salary,phone FROM employee ORDER BY salary ASE;
SQL内置函数
函数名 | CIOUNT | SUM | AVG | MAX | MIN |
---|---|---|---|---|---|
作用 | 计数 | 求和 | 求平均值 | 求最大值 | 求最小值 |
#例如
SELECT MAX(salary) AS max_salary,MIN(salary) FROM employee;
子查询
应用:例如:想要知道名为 “Tom” 的员工所在部门做了几个工程。员工信息
储存在 employee 表中,但工程信息储存在 project 表中。
对于这样的情况,我们可以用子查询:
SELECT of_dpt,COUNT(proj_name) AS count_project FROM project GROUP BY of_dpt HAVING of_dpt IN (SELECT in_dpt FROM employee WHERE name='Tom');
上面代码包含两个 SELECT 语句,第二个 SELECT 语句将返回一个集合的数据形式,然后被第一个 SELECT 语句用 in 进行判断。
HAVING 关键字可以的作用和 WHERE 是一样的,都是说明接下来要进行条件筛选操作。区别在于 HAVING 用于对分组后的数据进行筛选
子查询可以扩展到更多层
链接操作
在处理多个表时,子查询只有在结果来自一个表时才有用。但如果需要显示两个表或多个表中的数据,这时就必须使用连接 (join) 操作。 连接的基本思想是把两个或多个表当作一个新的表来操作。
#第一种
SELECT id,name,people_num FROM employee,department WHERE employee.in_dpt = department.dpt_name ORDER BY id;
#第二种JOIN ON(结果与第一种一样)
SELECT id,name,people_num FROM employee JOIN department ON employee.in_dpt = department.dpt_name ORDER BY id;