title: MySQL笔记一
date: 2019-05-28 16:21:00
tags: MySQL笔记
categories: 技术
MySQL学习笔记(笔记一)
学习自尚硅谷MySQL核心技术,练习所用的数据均来自尚硅谷MySQL核心技术:http://www.atguigu.com/download_detail.shtml?v=3
基础查询
语法:
select 查询列表 from 表名;
- 特点:
- 查询列表可以是:表中的字段,常量,表达式,函数
- 查询的结果是一个虚拟的表格
查询表中的单个字段
SELECT last_name From employees;
查询表中的多个字段
SELECT last_name,salary,email FROM employees;
查询表中的所有字段
SELECT * FROM employees;
查询常量值
SELECT 100;
SELECT 'jhon';
查询表达式
SELECT 100*98;
查询函数
SELECT VERSION();
起别名
- 便于理解
- 如果要查询的字段有重名的情况,使用别名可以区分开
方式一:使用AS
SELECT 100%98 AS 结果;
SELECT last_name AS 姓,first_name AS 名 FROM employees;
方式二:使用空格
SELECT last_name 姓,first_name 名 FROM employees;
案例
- 查询salary,显式结果为out put
SELECT salary AS "out put" FROM employees;
DISTINCT去重
案例
- 查询员工表中所有的部门编号
SELECT DISTINCT department_id FROM employees;
+号的作用
- 仅仅只有一个功能:运算符
-
两个操作数都为数值型,则做加法运算:
select 100+50;
-
其中一方为字符型,试图将字符型数值转换成数值型,
如果转换成功则继续做加法运算select '123'+90;
如果转换失败,则将字符型数组转换成0elect 'jhon'+90;
3. 只要其中一方结果为null,则结果肯定为`nullselect null+10;`
案例
-
查询员工名和姓连接成一个字段,并显示为姓名
SELECT CONCAT('a','b','c') AS 结果;
SELECT CONCAT(last_name,first_name) AS 姓名 FROM employees;
条件查询
语法:
elsect 查询列表 from 表名 where 筛选条件;
分类:
- 按条件表达式筛选
条件运算符:> < = >= <= <> != - 按逻辑表达式筛选
逻辑运算符:
作用:用于连接条件表达式
&& || !
and or not - 模糊查询:
like
between and
in
is null
按条件表达式筛选
案例一
-
查询工资>12000的员工信息
SELECT * FROM employees WHERE salary>12000;
案例二
-
查询部门编号不等于90号的员工名和部门编号
SELECT last_name,department_id
FROM employees
WHERE department_id<>90;
按逻辑表达式筛选
案例一
-
查询工资在10000-20000之间的员工名,工资以及奖金
SELECT last_name,salary,commission_pct
FROM employees
WHERE salary>10000 AND salary<20000;
案例二
-
查询部门编号不是在90-110之间的,或者工资高于15000的员工信息
SELECT *
FROM employees
WHERE department_id<90 OR department_id>110
OR salary>15000;
模糊查询
like
between and
in
is null|is not null
like
- 特点:一般和通配符搭配使用
- 通配符%:任意多个字符
- 通配符_:任意单个字符
案例一
-
查询员工名中包含字符a的员工信息
SELECT * FROM employees WHERE last_name LIKE '%a%';
案例二
-
查询员工名中第三个字符为e,第五个字符为a的员工名和工资
SELECT last_name,salary
FROM employees
WHERE last_name LIKE '__e_a%';
案例三
-
查询员工名中第二个字符为下划线的员工名
SELECT last_name
FROM employees
WHERE last_name LIKE '_\_%';
或者
SELECT last_name
FROM employees
WHERE last_name LIKE '_$_%'
ESCAPE '$';
in
- 含义:判断某字段的值是否属于in列表中的一项
- 特点:
- 使用in比使用or提高语句整洁度
- in列表的值类型必须统一或兼容
案例
-
查询员工的工种编号是IT_PROG,AD_VP,AD_PRES中的一个员工名的工种编号
使用or:
SELECT last_name,job_id
FROM employees
WHERE job_id='IT_PROG'
OR job_id='AD_VP'
OR job_id='AD_PRES';
使用in:
SELECT last_name,job_id
FROM employees
WHERE job_id
IN ('IT_PROG' ,'AD_VP' ,'AD_PRES');
is null
- =或<>不能用于判断null值
- is null或is not null 可以判断null值
案例一
-
查询没有奖金的员工名和奖金率
SELECT last_name,commission_pct
FROM employees
WHERE commission_pct IS NULL;
案例二
-
查询有奖金的员工名和奖金率
SELECT last_name,commission_pct
FROM employees
WHERE commission_pct IS NOT NULL;
安全等于: <=>
案例一
-
查询没有奖金的员工名和奖金率
SELECT last_name,commission_pct
FROM employees
WHERE commission_pct <=> NULL;
案例二
-
查询工资为12000的员工信息
SELECT last_name,salary
FROM employees
WHERE salary <=> 12000;
排序查询
语法:
selsect 查询列表
from 【表 where 筛选条件】
order by 排序列表 【asc|desc】
- 特点:
- asc升序,desc降序
如果不写默认升序 - order by 子句中可以支持单个字段,多个字段,表达式,函数,别名
- order by 子句一般是放在查询语句的最后面,但limit子句除外
- asc升序,desc降序
案例一
-
查询员工信息,要求工资从高到低排序
SELECT * FROM employees ORDER BY salary DESC;
案例二
-
查询部门编号>=90的员工信息,按入职时间先后进行排序
SELECT * FROM employees
WHERE department_id>=90
ORDER BY hiredate ASC;
案例三
-
按年薪的高低显示员工的信息和年薪【按表达式排序】
SELECT *,salary*12*(1+IFNULL(commission_pct,0)) AS 年薪 FROM employees ORDER BY salary*12*(1+IFNULL(commission_pct,0)) DESC;
案例四
-
按年薪的高低显示员工的信息和年薪【按别名排序】
SELECT *,salary*12*(1+IFNULL(commission_pct,0)) AS 年薪 FROM employees ORDER BY 年薪 DESC;
案例五
-
按姓名的长度显示员工的姓名和工资【按函数排序】
SELECT LENGTH(last_name) 字节长度,last_name,salary FROM employees ORDER BY LENGTH(last_name) DESC;
案例六
-
查询员工信息,要求先按工资升序排序,再按员工编号降序排序【按多个字段排序】
SELECT * FROM employees ORDER BY salary ASC,employee_id DESC;