MySQL查询语句总结

一、数据库的好处
1:可以持久化数据到本地
2:结构化查询
二、数据库常见的概念
1:DB、数据库,存储数据的容器
2:DBMS、数据库管理系统,又称为数据库软件或数据库产品,用于创建或管理DB
3:SQL、结构化查询语言,用于和数据库之间的通信,几乎主流的数据库都通用
三、数据库存储数据的特点
1:数据存放到列表中,然后表在放到库里面
2:一个库可以有很多张表,每张表具有唯一的表名用来标识自己
3:表中有一个或多个列,列又称为“字段”
4:表中的每一行数据
四:常见的数据库
MySQL,oracle,db2,SqlServer
五:MySQL的背景
前生是瑞典的AB公司,08年被sun公司收购,09年sun被oracle收购
六:MySQL优点
1:开源、免费、成本低
2:性能高、可移植性好
3:体积小,便于安装
七:MySQL服务的启动和停止
1:通过cmd
net start 服务名
net stop 服务名
2:计算机–管理–服务
八:MySQL服务的登录和退出
登录:mysql -h 主机名 -P 端口号 -u 用户名 -p密码
退出:exit

1:基础查询

语法:
	select 查询列表 form 表名;
	DESC employees;  显示
特点:
	1:查询列表可以为:表中字段、表中常量值、表达式、函数
	2:查询的结果是一个虚拟的表格
		
1.1:查询表中的单个字段
SELECT last_name FROM employees;
1.2:查询表中的多个字段
SELECT last_name,salary,email FROM employees;
1.3:查询表中所有字段
SELECT * FROM employees;
1.4:查询常量值
SELECT 100;
SELECT 'john';
1.5:查询表达式
SELECT 100*98;
1.6:查询函数
SELECT VERSION();
**1.7:起别名**
	特点:
		1:便于理解
		2:如果要查询的字段有重名的情况,使用别名可以区分开来
	**方式一:使用AS**
SELECT 100*98 AS 这是一个别名;
SELECT last_name AS,first_name ASFROM employees;
	**方式二:使用空格**
SELECT last_name 姓,first_name 名 FROM employees;
	如果有特殊符号要用“”
SELECT salary AS "out put" FROM employees;
**1.8:去重(DISTINCT)**
SELECT DISTINCT department_id FROM employees;
**1.9:“+”号的作用**
特点:只能做运输符。
SELECT 90+10;		两个操作数为数值型,做加法
SELECT '123'+90;	只要其中一方为字符型,试图将字符数值转换成数值
					如果转换成功,则继续做加法运算
SELECT 'john'+90;   如果转化失败,则将字符数值装换成0
SELECT null+ 10;	只要其中一方为null,则结果肯定为null 
**1.10:拼接(CONCAT())**
SELECT CONCAT(last_name,first_name) AS 姓名 FROM employees;
	特点:
	1:可以拼接多个
	2:只要其中一方为null,则结果肯定为null
**1.11:判断(IFNULL(有可能为null的值,想要输出结果的值))**
SELECT IFNULL(commission_pct,0) AS 奖金率,commission_pct FROM employees; 

2:条件查询

语法:
	select 
		查询列表
	from
		表名
	where
		筛选条件;
分类:
	1:按条件表达式筛选
		条件运算符:
> < = != <> >= <=
	2:按逻辑表达式筛选
		逻辑运算符:
and or not
	3:模糊查询
like 
between and 
in 
is null 
2.1:按条件表达式筛选
SELECT * FROM employees WHERE salary>12000;(查询工资大于12000)
2.2:按逻辑表达式筛选
	作用:用于连接条件表达式
and:两个条件都为true,结果为true,反之为false
or: 只要有一个条件为true,结果为true,反之为false
not:如果连接的条件本身为false,结果为true,反之为false 
查询工资在900012000的员工
SELECT 
	last_name,salary 
FROM 
	employees 
WHERE 
	salary>=900 AND salary<=12000;
查询部门编号不在90110之间或者工资高于15000的员工姓名和工资
SELECT 
	last_name,salary 
FROM 
	employees 
WHERE 
	department_id<90 OR department_id>110 OR salary>=15000;		
2.3:模糊查询 like	between and		in		is null|is not null
2.3.1like
特点:
	1:一般与通配符搭配使用
		通配符:
			%表示任意多个字符,包含0个字符
			_表示任意一个字符
eg1:查询员工名中包含字符a的员工信息
	SELECT
		*
	FROM
		employees
	WHERE
		last_name LIKE '%a%';
eg2:查询员工名中第三个字符为n,第五个字符为d的员工信息
	SELECT
		*
	FROM
		employees
	WHERE	
		last_name LIKE '__n_l%';
eg3:查询员工名中第二字符为_的员工名
	SELECT
		last_name
	FROM
		employees
	WHERE	
		last_name LIKE '_\_%';	(反斜杠转义\)		
	2.3.2:between and 
		特点:
		1:提高语句简洁度
		2:两边结果都包含
		3:两个临界值不要调换顺序
eg1:查询员工编号在100120之间的员工信息
	SELECT
		*
	FROM
		employees
	WHERE
		employee_id BETWEEN 100 AND 120;			
	2.3.3:in
		特点:
		1:使用in提高语句简洁度
		2:in列表的值类型必须统一或类型兼容
		3:不支持通配符
eg1:查询员工的工种编号是 AD_VP AD_PRES IT_PROG中的一个员工名和工种编号
	SELECT
		last_name,job_id
	FROM 
		employees
	WHERE	
		job_id IN ('AD_VP','AD_PRES','IT_PROG');			
	2.3.4: is not| is not null 
		特点:
		1:=或<>不能判断null
		2:is null或is not null 可以判断null值
eg1:查询没有奖金的员工名和奖金率
	SELECT 
		last_name,commission_pct
	FROM
		employees
	WHERE
		commission_pct IS  NULL;			
		eg2:查询有奖金的员工名和奖金率
SELECT 
	last_name,commission_pct
FROM
	employees
WHERE
	commission_pct IS NOT NULL;

3:排序查询

语法:
select 
	查询列表
fromwhere
	筛选条件
order by
	排序列表 asc|desc
特点:
	1:asc表升序,desc表降序  不写默认升序
	2:order by子句中可以支持单个或多个字段、表达式、函数、别名进行排序
	3:order by一般放在查询语句的最后面
eg1:查询员工信息,要求工资从高到低排序
	SELECT * FROM employees ORDER BY salary DESC;
eg2:查询员工信息,要求工资从低到高排序
	SELECT * FROM employees ORDER BY salary ASC;
eg3:查询部门编号>=90的员工信息,按入职时间排序
	SELECT * FROM employees
	WHERE
		department_id>=90
	ORDER BY 
		hiredate ASC;
eg4:按年薪的高低显示员工的信息和年薪 【按表达式排序】
	SELECT last_name,salary*12*(1+IFNULL(commission_pct,0)) 年薪
	FROM employees
	ORDER BY last_name,salary*12*(1+IFNULL(commission_pct,0)) DESC;
eg5:按年薪的高低显示员工的信息和年薪 【按别名排序】
	SELECT last_name,salary*12*(1+IFNULL(commission_pct,0)) 年薪
	FROM employees
	ORDER BY 年薪 DESC;
eg6:按姓名的长度显示员工的姓名和工资【按函数排序】
	SELECT LENGTH(last_name) AS 字节长度,last_name,salary
	FROM employees
	ORDER BY LENGTH(last_name) DESC;
eg7:查询员工姓名,工资,员工编号,要求先按工资排序,后按员工编号排序【按多个字段排序】
	SELECT last_name,salary,employee_id
	FROM employees
	ORDER BY salary ASC,employee_id DESC;

4:常见的函数
调用函数语法:

select 函数名(实参列表) from;
特点:
	1:叫什么(函数名)
	2:干什么(函数功能)
分类:
	1:单行函数
		eg:concat、length、ifnull等
	2:分组函数
		功能:做统计使用,又称为统计函数,聚合函数,组函数
4.1:字符函数
	4.1.1:LENGTH()获取参数值的字节个数
SELECT  LENGTH('john');
		4.1.2:CONCAT()拼接字符串
```sql
SELECT CONCAT(last_name,first_name) AS 姓名 FROM employees;
	4.1.3:upper(将字符改为大写)、lower(将字符改为小写)

SELECT UPPER(‘john’);
SELECT LOWER(‘JOHN’);
eg1:将姓改为大写,名改为小写

SELECT CONCAT(LOWER(last_name),UPPER(first_name)) AS 姓名 
FROM employees;
	4.1.4:substr
		注意:索引从1开始,截取后面所有的字符
eg1:截取从指定索引处后面所有字符
SELECT SUBSTR('头疼,发热,流鼻涕,快用三九感冒灵颗粒',15) AS 三九药业;
		eg2:截取从指定索引处到指定结束的字符
SELECT SUBSTR('头疼,发热,流鼻涕,快用三九感冒灵颗粒',1,9) AS 三九药业;
	4.1.5:instr(返回第一次出现的起始索引,如果没有就返回0)
SELECT INSTR('头疼,发热,流鼻涕,快用三九感冒灵颗粒','感冒灵颗粒') AS 三九药业;
	4.1.6:trim(去掉前后的9,如果没有from指定就去掉前后的空格)
SELECT TRIM('9' FROM '999感9冒9灵9颗9粒999') AS 三九药业;
	4.1.7:lpad(用指定的字符实现左填充指定的长度)
SELECT LPAD('感冒灵颗粒',8,'9') AS 三九药业;
	4.1.8:rpad(用指定的字符实现右填充指定的长度)

SELECT RPAD(‘感冒灵颗粒’,8,‘9’) AS 三九药业;
4.1.9:replace (替换,如果有多个都会被替换掉)

SELECT REPLACE('治感冒就用三九感冒灵颗粒','三九感冒灵颗粒','小柴胡颗粒') AS 不知名药业;
4.2:数学函数
4.2.1:round (四舍五入,正负数也是一样的道理,绝对值再加正反号)
	SELECT ROUND(1.5);
	SELECT ROUND(1.567,2);指定小数位数
4.2.2:ceil (向上取整,返回>=该参数的最小整数)
	SELECT ROUND(1.01);
4.2.3:floor (向下取整,返回<=该参数的最小整数)
	SELECT FLOOR(-1.06);
4.2.4truncate(截断)
	SELECT	TRUNCATE(1.655555,1);小数点后保留一位
4.2.5mod(取余与%是一样的,如果操作数为负数)
	其实取余操作是这样子的:mod(a,b)
		a-a/b*b
	SELECT MOD(13,3);
	SELECT 13%3;
4.3:日期函数
4.3.1:NOW 返回当前系统日期加时间
	SELECT NOW();
4.3.2:curdate 返回当前系统日期,不包含时间
	SELECT CURDATE();
4.3.3:curtime 返回当前系统时间,不包含日期
	SELECT CURTIME();
4.3.4:可以获取指定的部分:年(year),月(month),日(day),时,分,秒
	SELECT YEAR(NOW()) AS;   只返回年部分
	SELECT YEAR('1999-1-1') AS;
4.3.5:str_to_date 将字符通过指定的格式转换成日期
	SELECT STR_TO_DATE('11-14-1999','%c-%d-%Y');
	SELECT STR_TO_DATE('11-14 1999','%c-%d %Y');
4.3.6:date_format 将日期转换成字符
	SELECT	DATE_FORMAT(NOW(),'%Y年%m月%d日');
4.4:其他函数
4.4.1SELECT VERSION(); 查看数据库版本号
4.4.2SELECT DATABASE(); 查看数据库
4.4.3SELECT USER();查看当前用户
4.5:流程控制函数
	4.5.1:if函数,有点像java中的 if  else 函数	
		SELECT IF(1>5,'1大于5','1小于5');
	4.5.2:case函数
语法一:
	case 要判断的字段或表达式
	when 常量1 then 要显示的值1或语句1;
	when 常量2 then 要显示的值2或语句2;
	...
	when 常量n then 要显示的值n或语句n;
	else 剩余的情况
	end
eg1:查询员工的工资,要求
	部门号=30,显示工资的1.1倍
	部门号=40,显示工资的1.2倍
	部门号-50,显示工资的1.3倍
	其他部门原工资
		SELECT salary AS 原始工资,department_id,
		CASE department_id
		WHEN 30 THEN salary*1.1
		WHEN 40 THEN salary*1.2
		ELSE salary
		END AS 新工资
		FROM employees;
语法二:(类似于多重ifcase 
when 条件1 then 要显示的值1或语句1
when 条件2 then 要显示的值2或语句2
...
else 剩余的情况
eg2:查询员工工资
要求工资>20000,显示A级
要求工资>15000,显示B级
要求工资>10000,显示C级
否则显示D级
	SELECT salary AS 原始工资,
	CASE 
	WHEN salary>20000 THEN 'A级'
	WHEN salary>15000 THEN 'B级'
	WHEN salary>10000 THEN 'C级'
	ELSE  'D级'
	END AS 工资级别
	FROM employees;
4.6:分组函数	(集合函数或统计函数)
	sum 求和、avg 平均值、max 最大值、min 最小值 count 计算个数		
4.6.1:sum 求和
	SELECT SUM(salary) FROM employees;
	SELECT AVG(salary) FROM employees;
	SELECT MAX(salary) FROM employees;
	SELECT MIN(salary) FROM employees;
	SELECT COUNT(salary) FROM employees;
4.6.2:分组参数支持哪些类型
	SUM 和 AVG合适处理 数值型 NULL值不参与运算 数据
	MAX 和 MIN支持大部分类型 NULL值不参与运算 数据
	COUNT 计数支持大部分类型,只计算不为空的数值 NULL值不参与运算
4.6.3:count函数
	SELECT COUNT(*) FROM employees; 统计行数,一般用COUNT(*)

5:分组查询:

语法:
	salary 分组函数,列(要求出现在group by的后面)
	from 表
	【where 筛选条件】
	group by 分组的列表
	【order by 字句】
注意:
	查询列表必须特殊,要求是分组函数和group by后出现的字段
特点:

						数据源 			位置						关键字
	分组 前 筛选		原始表			group by字句的前面			where
	分组 后 筛选		分组后的结果集	group by字句的后面			having
eg1:查询每个工种的最高工资
	SELECT MAX(salary),job_id
	FROM employees
	GROUP BY job_id;	

eg2:查询每个位置上的部门个数
	SELECT COUNT(*),location_id
	FROM departments
	GROUP BY location_id;
eg3:查询邮箱中包含a字符的,每个部门的平均工资(分组 前 筛选)
		SELECT AVG(salary),department_id
		FROM employees
		WHERE email LIKE '%a%'
		GROUP BY department_id;
				**分组函数做条件肯定是放在having字句中**

eg4:查询哪个部门的员工个数>2(分组 后 筛选 HAVING函数 )
	SELECT	COUNT(*),department_id
	FROM employees
	GROUP BY department_id
	HAVING COUNT(*)>2;	
eg5:查询每个工种有奖金的员工的最高工资(分组 前后 筛选)
	SELECT MAX(salary),job_id
	FROM employees
	WHERE commission_pct IS NOT NULL
	GROUP BY job_id
	HAVING MAX(salary)>10000;
5.1:按表达式或函数分组	
eg1:按员工姓名的长度分组,查询每一组的员工个数,筛选员工个数>5的有哪些	
	SELECT LENGTH(last_name) AS 姓名长度,COUNT(*) AS 员工个数
	FROM employees
	GROUP BY LENGTH(last_name)
	HAVING 员工个数>5;
5.2:按多个字段分组
eg1:查询每个部门每个工种的员工的平均工资
	SELECT AVG(salary),department_id,job_id
	FROM employees
	GROUP BY department_id,job_id;

6:连接查询(多表查询,当我们查询的字段涉及到多个表的时候,就用到了多表查询)

按年代分类:
	sql92标准:仅仅支持内连接
	sql99标准:支持内外连接,左外和右外连接,交叉连接
	
按功能分类:
	内连接:
		等值连接
		非等值连接
		自连接
	外连接:
		左外连接
		右外连接
		全外连接
	交叉连接:
6.1:等值连接
	eg1:查询员工名对应的部门名
		SELECT last_name,department_name
		FROM employees,departments
		WHERE employees.`department_id` = departments.`department_id`;
6.2:为 表 起别名,再做等值连接
	优点:
		1:提高语句的简洁度
		2:区分多个重名的字段
		注意:如果为表起了别名,则不能再用原来的表名去做限定
eg1:查询员工名、工种号、工种名
	SELECT  e.last_name,e.job_id,j.job_title
	FROM employees AS e,jobs AS j
	WHERE e.`job_id`=j.`job_id`;
6.3:非等值连接
	eg1:查询员工的工资和工资等级
SELECT salary,grade_level
FROM employees AS e,job_grades AS j
WHERE
salary BETWEEN j.`lowest_sal` AND j.`highest_sal`;
6.4:自连接
eg1:查询员工名和上级的名称
	SELECT e.employee_id,e.last_name,m.employee_id,m.last_name
	FROM employees AS e,employees AS m
	WHERE m.manager_id=e.employee_id;
6.5:sql99语法:
语法:
	select	查询列表
	from1 别名	【连接类型】
	join2 别名 
	on 连接条件
	【where 筛选条件】
	【group by 分组】
	【having 筛选条件】
	【order by 排序列表】
	连接类型:
		内连接:			inner
		外连接:		
			左外:			left
			右外:			right
			全外:			full
		交叉连接:			cross
	6.5.1:内连接
select	查询列表
from1 别名	
inner join2 别名 
on 连接条件
【where 筛选条件】
【group by 分组】
【having 筛选条件】
【order by 排序列表】	
	分类:
		等值连接	
		非等值连接
		自连接	
	特点:
		1:可添加排序、分组、筛选
		2:inner可以省略
		3:筛选条件放在where后面,连接条件放在on后面,提高可读性
		4:查询多表的交集部分
		
	**等值连接:
		eg1:查询员工名、部门名
SELECT last_name,department_name
FROM employees AS e INNER
JOIN departments AS d
ON e.`department_id`=d.`department_id`;
		eg2:查询名字中包含e的员工名和工种名(添加筛选)
SELECT last_name,job_title
FROM employees AS e
INNER JOIN jobs AS j
ON e.`job_id`=j.`job_id`
WHERE e.`last_name` LIKE '%e%';
		eg3:查询部门个数>3的城市名和部门个数(添加分组和筛选)
SELECT city,COUNT(*) AS 部门个数 
FROM departments AS d
INNER JOIN locations AS l
ON d.`location_id`=l.`location_id`
GROUP BY city
HAVING COUNT(*)>3;			
		eg4:查询员工名、部门名、工种名、并按部门名降序(多表查询)	
SELECT last_name,department_name,job_title
FROM employees AS e
INNER JOIN departments AS d ON e.`department_id`=d.`department_id`
INNER JOIN jobs AS j ON e.`job_id`=j.`job_id`
ORDER BY department_name DESC;
	**非等值连接
		eg1:查询员工的工资级别
SELECT salary,grade_level
FROM employees AS e
INNER JOIN job_grades AS g
ON e.`salary` BETWEEN g.`lowest_sal` AND g.`highest_sal`;	
	**自连接	
		eg1:查询姓名中包含字符k的员工的名字和上级的名字
SELECT e.last_name AS 员工,m.last_name AS 上级
FROM employees AS e
INNER JOIN employees AS m
ON e.`manager_id`=m.`employee_id`
WHERE e.`last_name` LIKE '%k%';				
	6.5.2:外连接:
		应用场景:用于查询一个表中有,另外一个表中没有的记录
		特点:
			1:外连接的查询结果为主表中的所有记录
				如果从表中有和它匹配的就显示出来,如果没有就用null填充
			2:左外连接,left join左边的是主表
				右外连接,right join右边的是主表
			3:左外和右外连接,交换两个表的顺序,可以实现相同的效果
eg1:查询男朋友不在男生表的女生名(左外连接)
		SELECT b.name,bo.*
		FROM beauty AS b
		LEFT JOIN boys AS bo 
		ON b.boyfriend_id = bo.id;
	eg2:查询哪个部门没有员工(左外连接)
		SELECT d.*,e.employee_id
		FROM departments AS d
		LEFT JOIN employees AS e
		ON d.`department_id`=e.`department_id`
		WHERE e.`employee_id` IS NULL;
	eg3:查询哪个部门没有员工(右外连接)
		SELECT d.*,e.employee_id
		FROM employees AS e
		RIGHT JOIN departments AS d
		ON d.`department_id`=e.`department_id`
		WHERE e.`employee_id` IS NULL;	
6.6:子查询
	含义:
		出现在其他语句中的select语句,称为子查询或者内查询
		外部的查询语句,称为主查询
	分类:
		按子查询出现的位置
			select后
				仅仅支持标量子查询
			from后
				表子查询
			where或having后  ***
				标量子查询 **
				列子查询 **
				行子查询
			exists后
				表子查询
		按结果集的行列数不同:
			标量子查询(结果集只有一行一列)
			列子查询(结果集只有一列多行)
			行子查询(结果集只有一行多列)
			表子查询(结果集一般为一行多列)

	6.6.1:where或having后
			1:标量子查询(结果集只有一行一列)
			2:列子查询(结果集只有一列多行)
			3:行子查询(结果集只有一行多列)		
		特点:
			1:子查询放在小括号内
			2:子查询一般放在条件的右侧
			3:标量子查询,一般搭配单行操作符使用例如:> < >= <= =
			4:列子查询,一般搭配多行操作符使用,in、any/some、all
			5:子查询的执行优先于主查询执行,主查询的条件用到了子查询的结果
		
	标量子查询:
eg1:查询谁的工资比Abel高	(where后的查询)
	第一步:查询Abel的工资
		SELECT salary
		FROM employees
		WHERE last_name = 'Abel';

	第二步:查询员工的信息,满足salary>第一步的结果
		SELECT * 
		FROM employees
		WHERE salary>(

		SELECT salary
		FROM employees
		WHERE last_name = 'Abel'
		);			
		eg2:返回job_id与141号员工相同,salary比143号员工多的员工 姓名,job_id和工资	(where后的查询)
第一步:查询job_id等于141的员工
	SELECT job_id
	FROM employees
	WHERE employee_id = 141;
第二步:查询143员工的工资
	SELECT salary 
	FROM employees
	WHERE employee_id = 143;
第三步:查询员工的姓名,job_id和工资,要求job_id=第一步,并且salary>第二步
	SELECT last_name,job_id,salary
	FROM employees
	WHERE job_id=(
		SELECT job_id
		FROM employees
		WHERE employee_id = 141
	) AND salary>(
		SELECT salary 
		FROM employees
		WHERE employee_id = 143
	);
	
		eg3:返回公司工资最少的员工的last_name,job_id,salary	(where后的查询)
第一步:查询工资最低的
SELECT MIN(salary)
FROM employees
第二步:查询last_name,job_id,salary 要求salary=第一步
SELECT last_name,job_id,salary
FROM employees
WHERE salary=(
	SELECT MIN(salary)
	FROM employees
);
		eg4:查询最低工资大于,50号部门最低工资的部门id和他的最低工资
第一步:查询50部门的最低工资
	SELECT MIN(salary)
	FROM employees
	WHERE department_id = 50;
第二步:查询每一个部门的最低工资
	SELECT MIN(salary),department_id
	FROM employees
	GROUP BY department_id;
第三步:做最后的筛选,满足要求MIN(salary)>第一步
	SELECT MIN(salary),department_id
	FROM employees
	GROUP BY department_id
	HAVING MIN(salary)>(
		SELECT MIN(salary)
		FROM employees
		WHERE department_id = 50
	);				
	列子查询:
		使用多行比较操作符
			in/not in		等于列表中的任意一个 ***
			any/some		和子查询返回的某个值比较
			all				和子查询返回的所有值比较
eg1:返回location_id是14001700的部门中所有员工姓名 
	第一步:查询location_id是14001700的部门编号
		SELECT department_id 
		FROM departments
		WHERE location_id IN(1400,1700);

	第二步:查询员工姓名,要去部门号是第一步列表中的某一个
		SELECT last_name
		FROM employees
		WHERE department_id IN(
			SELECT department_id 
			FROM departments
			WHERE location_id IN(1400,1700)
		);	
	6.6.2:select后面
eg1:查询每个部门的员工个数
	SELECT d.*,(
	SELECT COUNT(*)
	FROM employees AS e
	WHERE e.department_id = d.`department_id`
	) AS 个数
	FROM departments AS d;
	6.6.3:from后面
eg2:查询每个部门的平均工资的工资等级
	第一步:查询每个部门的平均工资的工资等级 
		SELECT AVG(salary) AS ag,department_id
		FROM employees
		GROUP BY department_id
	第二步:连接第一步的结果集合job_grades表筛选平均工资在一个范围内
		SELECT ag_dep.*,g.grade_level
		FROM (
			SELECT AVG(salary) AS ag,department_id
			FROM employees
			GROUP BY department_id
		) AS ag_dep
		INNER JOIN job_grades AS g 
		ON ag_dep.ag BETWEEN lowest_sal AND highest_sal;
注意:将子查询结果充当一张变,要求必须起别名 
7.1:分页查询(重要)
	应用场景:当要显示的数据,一页显示不全的时候,需要分页
语法:
	select 查询列表
	from 表名
	【
	on 连接条件
	where 筛选条件
	group by 分组子段
	having 分组后的筛选
	order by 排序列表			
	】
	limit 要显示的条目的起始索引从0开始  要显示的条目个数
	特点:limit语句是在语句最后执行的

```sql
eg1:查询前五条的员工信息
	SELECT * FROM employees LIMIT 0,5;
eg2:查询第11到第15的员工信息
	SELECT * FROM employees LIMIT 10,15;	
eg3:有奖金的员工信息,并且工资比较高的显示出来
	SELECT * FROM employees
	WHERE commission_pct IS NOT NULL
	ORDER BY salary DESC 
	LIMIT 10;	
8.1:联合查询(union)
语法:
	查询语句一:
	union
	查询语句二:
	union
	查询语句三:
	......
	应用场景:
		当我们查询的结果来自多个表,并且表与表之间没有联系,
		简单的说就是和并成一个表给你显示出来
	特点:
		1:要求多条语句查询列数一样
		2:要求多条语句查询的每一列的类型要一致
		3:会去重(如果不想去重在union后面加all)
eg1:查询部门编号>90或邮箱包含a的员工信息
以前的方法:
	SELECT * FROM employees WHERE email LIKE 'a' OR department_id>90;
联合查询:
	SELECT * FROM employees WHERE email LIKE 'a'
	UNION
	SELECT * FROM employees WHERE department_id>90;

下面是数据库的相关资料
链接:https://pan.baidu.com/s/1h_foMsUv1-v5esD8D29JTQ
提取码:1rdr

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值