基础查询
select 查询列表 from 表名;
USE myemployees; //最好写上
1.查询表中的单个字段
SELECT last_name FROM employees;
2.查询表中的多个字段
SELECT last_name,salary,email FROM employees;
3.查询表中的所有字段
#方式一:
SELECT
employee_id
,
first_name
,
last_name
,
phone_number
,
last_name
,
job_id
,
phone_number
,
job_id
,
salary
,
commission_pct
,
manager_id
,
department_id
,
hiredate
FROM
employees ;
#方式二:
SELECT * FROM employees;
#4.查询常量值
SELECT 100;
SELECT ‘john’;
#5.查询表达式
SELECT 100%98;
#6.查询函数
SELECT VERSION();
7.起别名
方式一:使用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;
#8.去重关键词 DISTINCT
#案例:查询员工表中涉及到的所有的部门编号
SELECT DISTINCT department_id FROM employees;
#9.+号的作用
/*
mysql中的+号:
仅仅只有一个功能:运算符
①若加号两边都为数值型,则两边相加
②若有字符型则转换为数值型相加,无法识别字符则视为0相加
③若有null相加则为null
*/
10、连接关键字 CONCAT():将括号中的内容连接。可以连接字符串 “xxxx”.和null连接为null
SELECT CONCAT(‘a’,‘b’,‘c’) AS 结果;
SELECT
CONCAT(last_name,first_name) AS 姓名
FROM
employees;
11、 ifnull(表 , a)关键字:若表中一行内容位null则返回 a 。
select ifnull(last_name , a) from employees;
_______________________________________________________________________________进阶2:条件查询
语法:
select
查询列表
from
表名
where
筛选条件;
分类:
一、按条件表达式筛选
简单条件运算符:> < = != <> >= <=
二、按逻辑表达式筛选
逻辑运算符:
作用:用于连接条件表达式
&&和and:两个条件都为true,结果为true,反之为false
||或or: 只要有一个条件为true,结果为true,反之为false
!或not: 如果连接的条件本身为false,结果为true,反之为false
三、模糊查询
/*
like
between and
in()
is null is not null
<=>
/
#1.like
/
特点:
①一般和通配符搭配使用
通配符:
% 任意多个字符,包含0个字符。%向外字符可以为任意字符
_ 任意单个字符。一个_代表此位置可以代表任何字符
#案例1:查询员工名中包含字符a的员工信息
select
*
from
employees
where
last_name like ‘%a%’;
#案例2:查询员工名中第三个字符为e,第五个字符为a的员工名和工资
select
last_name,
salary
FROM
employees
WHERE
last_name LIKE ‘__n_l%’;
#案例3:查询员工名中第二个字符为_的员工名
SELECT
last_name
FROM
employees
WHERE
last_name LIKE ‘_KaTeX parse error: Expected group after '_' at position 1: _̲%' ESCAPE '’;
2、.between and
①使用between and 可以提高语句的简洁度
②包含临界值
③两个临界值不要调换顺序
#案例1:查询员工编号在100到120之间的员工信息
SELECT
*
FROM
employees
WHERE
employee_id BETWEEN 120 AND 100;//前后顺序不能颠倒,AND之前为大于 之后为小于.
3、in
含义:判断某字段的值是否属于in列表中的某一项
特点:
①使用in提高语句简洁度
②in列表的值类型必须一致或兼容
③in列表中不支持通配符
#案例:查询员工的工种编号是 IT_PROG、AD_VP、AD_PRES中的一个员工名和工种编号
SELECT
last_name,
job_id
FROM
employees
WHERE
job_id IN( ‘IT_PROT’ ,‘AD_VP’,‘AD_PRES’);
4、is null
=或<>不能用于判断null值
is null或is not null 可以判断null值
5、安全等于 <=>
排序查询
语法:
select 查询列表
from 表名
【where 筛选条件】
order by 排序的字段或表达式 + asc 或 desc 默认为升序;
1、asc代表的是升序,可以省略
desc代表的是降序
2、order by子句可以支持 单个字段、别名、表达式、函数、多个字段
3、order by子句在查询语句的最后面,除了limit子句
*/
#1、按单个字段排序
SELECT * FROM employees ORDER BY salary DESC;
#2、添加筛选条件再排序
#案例:查询部门编号>=90的员工信息,并按员工编号降序
SELECT *
FROM employees
WHERE department_id>=90
ORDER BY employee_id DESC;
#3、按表达式排序
#案例:查询员工信息 按年薪降序
SELECT ,salary12*(1+IFNULL(commission_pct,0))
FROM employees
ORDER BY salary12(1+IFNULL(commission_pct,0)) DESC;
#4、按别名排序
#案例:查询员工信息 按年薪升序
SELECT ,salary12*(1+IFNULL(commission_pct,0)) 年薪
FROM employees
ORDER BY 年薪 ASC;
#5、按函数排序
#案例:查询员工名,并且按名字的长度降序
SELECT LENGTH(last_name),last_name
FROM employees
ORDER BY LENGTH(last_name) DESC;
#6、按多个字段排序
#案例:查询员工信息,要求先按工资降序,再按employee_id升序
SELECT *
FROM employees
ORDER BY salary DESC,employee_id ASC;
常见函数(方法)
1、基础函数
1、字符函数 LENGTH : LENGTH(‘john’)。
2、拼接函数 CONCAT : CONCAT(last_name,’_’,first_name)。
3、大小写转换函数 upper、lower : UPPER(‘john’); LOWER(‘joHn’)。
4、 截取函数 substr、substring :
SUBSTR(‘李莫愁爱上了陆展元’,7) out_put; //从7号位置开始截取
SUBSTR(‘李莫愁爱上了陆展元’,1,n) out_put;//从1号索引开始截取N个字段(索引1计入)
5、查找字符函数instr: 返回子串第一次出现的索引,如果找不到返回0, INSTR(‘杨不殷’,‘殷’);
6、 删除两边函数 trim() :
LENGTH(TRIM(’ 张翠山 ')) AS out_put;
TRIM(‘a’ FROM ‘aaaaaa张aa翠aaaa’) AS out_put;结果为 张aa翠。不删除内容体间。
7、填充函数 lpad左填充、rpad右填充 : LPAD( 被填充体 , 填充后字符长度 , '填充内容 ')
8、替换函数 replace: REPLACE(‘被替换体’,‘被替换的内容’, ‘替换内容’ )
2、数学函数
1、四舍五入函数 round : ROUND(-1.55);
2、向上取整函数 ceil : SELECT CEIL(-1.02);
3、向下取整函数 floor : SELECT FLOOR(-9.99);
4、 截断函数 truncate : TRUNCATE(1.69999,1); 保留小数点后1位
5、 取余函数 : MOD(10,-3);
6、 随机函数 : rand() 从0到1之间取随机数[0.0, 1.0) 浮点型
3、日期函数
1、返回当前系统旟+时间 now
SELECT NOW();
2、 返回当前系统日期,不包含时间 curdate
SELECT CURDATE();
3、返回当前时间,不包含日期 curtime
SELECT CURTIME();
4、 可以获取指定的部分,年、月、日、小时、分钟、秒
SELECT YEAR(NOW()) 年;
SELECT YEAR(‘1998-1-1’) 年;
SELECT YEAR(hiredate) 年 FROM employees;
SELECT MONTH(NOW()) 月;
SELECT MONTHNAME(NOW()) 月;
5、 字符转date日期 :str_to_date(字符日期,转化格式) 如 str_to_date(‘9-13-1999’,’%m-%d-%Y’)
date日期转字符 :date_format(日期 , 转化格式 ) 如 DATE_format(“2018/6/6”,"%Y年%m月%d日")
4、流程控制函数
1、if 函数
SELECT IF(10<5,‘大’,‘小’);
2、case 函数
格式一 :
case 需要判断的字段货表达式
when X then 显示体
when Z then 显示体
else 显示体
end (表示结束)
格式二 :
case
when 需要判断体 then 显示体
when 需要判断体 then 显示体
else 显示体
end (表示结束)
5、分组函数
分类:
sum 求和、avg 平均值、max 最大值 、min 最小值 、count 计算个数
特点:
1、sum、avg一般用于处理数值型
max、min、count可以处理任何类型
2、以上分组函数都忽略null值
3、可以和distinct搭配实现去重的运算
4、count函数的单独介绍,一般使用count()用作统计行数
5、count函数的详细介绍
SELECT COUNT(salary) FROM employees;
SELECT COUNT() FROM employees;
SELECT COUNT(1) FROM employees;
效率:
MYISAM存储引擎下 ,COUNT()的效率高
INNODB存储引擎下,COUNT()和COUNT(1)的效率差不多,比COUNT(字段)要高一些
6、和分组函数一同查询的字段有限制
SELECT AVG(salary),employee_id FROM employees;
以最少函数位基准展现表
分组查询
group by + 分组类型(可以是函数、表达式等,一般使用单个类型)
后筛选 having,(前筛选为where)
完成显示后在查询,然后再显示表,在排序关键词 order by 之前
连接查询
内连接
等值连接查询
92版写法
SELECT last_name,department_name
FROM employees,departments
WHERE employees.department_id
=departments.department_id
;
99版写法
SELECT last_name,department_name