SQL的语言分类
- DQL(Data Query Language):数据查询语言:select
- DML(Data Manipulate Language):数据操作语言:insert 、update、delete
- DDL(Data Define Languge):数据定义语言:create、drop、alter
- TCL(Transaction Control Language):事务控制语言:commit、rollback
DQL语言的学习
1.基础查询
use 表名
SELECT 要查询的东西 【FROM 表名】
特点:
①通过select查询完的结果 ,是一个虚拟的表格,不是真实存在
② 要查询的东西 可以是常量值、可以是表达式、可以是字段、可以是函数
示例:
查询单个字段:select 字段名 from 表名;
查询多个字段:select 字段名,字段名 ,字段名 from 表名;
查询所有字段:select * from 表名
查询常量:select 常量值;(注意:字符型和日期型的常量值必须用单引号引起来,数值型不需要)
查询函数:select 函数名(实参列表);select VERSION();(查询版本号)
查询表达式:select 100/1234;
起别名①as select 100%98 结果;②空格 select 100%98 结果;
去重 :select distinct 字段名 from 表名;
+ 作用:做加法运算
select 数值+数值; 直接运算
select 字符+数值;先试图将字符转换成数值,如果转换成功,则继续运算;否则转换成0,再做运算
select null+值;结果都为null
concat函数
功能:拼接字符
select concat(字符1,字符2,字符3,...); select concat('a','b','c') as 结果;(abc)
ifnull函数
功能:判断某字段或表达式是否为null,如果为null 返回指定的值,否则返回原本的值
select ifnull(commission_pct,0) from employees;
isnull函数
功能:判断某字段或表达式是否为null,如果是,则返回1,否则返回0
2.条件查询
select 查询列表 from 表名 where 筛选条件;
二、筛选条件的分类
1、简单条件运算符
> < = <> != >= <= <=>
2、逻辑运算符
- &&和and:两个条件都为true,结果为true,反正为false
- ||和or :只要有一个条件为true,结果为true,反之为false
- ! 和not :如果连接的条件本身为false,结果为true,反之为false
3、模糊查询
like:一般搭配通配符使用,可以判断字符型或数值型
通配符:
- %任意多个字符,包含0个字符
- _ 任意单个字符
- 转义字符 escape
select name from user where name like '-$-%' escape '$';
- between and
select age from user where age between 18 and 20;
- in
查询年龄是 18、19、20
select age from user where age in(18、19、20);
is null /is not null:用于判断null值
3.排序查询
- 特点
- asc :升序,如果不写默认升序
- desc:降序
- 排序列表 支持 单个字段、多个字段、函数、表达式、别名
- order by的位置一般放在查询语句的最后(除limit语句之外)
select 查询列表 from 表 where 筛选条件 order by 排序列表 【asc}desc】
查询员工信息,要求工资从高到低排序
select * from employees order by salary desc;
按年薪高低显示员工信息和年薪【按表达式排序】
select * ,salary*12*(1+ifnull(commission_pct,0)) 年薪 from employees order by salary*12*(1+ifnull(commission_pct,0)) desc;
按年薪高低显示员工信息和年薪【按别名排序】
select * ,salary*12*(1+ifnull(commission_pct,0)) 年薪 from employees order by 年薪 desc;
按姓名的长度显示员工的姓名和工资【按函数排序】
select length(name) 字节长度,name,salary from employees order by length(name) desc;
查询员工信息,要求先按工资排序,再按员工编号排序【按多个字段排序】
select * from employees order by salary asc,id desc;
4.常见函数
- 字符函数
length(获取参数值的字节个数)
select length('john');
concat(拼接字符串)
select concat(last_name,'_',first_name) from employees;
upper,lower(字符大小写变换)
select upper(‘john’);
select lower(‘JHON’);
substr,substring
注意:索引从1开始
#截取从指定索引处后面所有字符
select substr('李莫愁爱上了陆展元',7) out_put;
#截取从指定索引处指定字符长度的字符
select substring('李莫愁爱上了陆展元',1,3) out_put;
姓名中首字符大写,其他字符小写然后用_拼接,显示出来
select CONCAT(UPPER(SUBSTR(last_name,1,1)),'_',LOWER(SUBSTR(last_name,2))) out_put FROM employees;
instr (返回子串第一次出现的索引,如果找不到返回0)
select instr('杨不殷六侠悔爱上了殷六侠','殷六侠') AS out_put;
trim(去掉字符串中前后空格)
select LENGTH(TRIM(' 张翠山 ')) AS out_put;
select TRIM('aa' FROM 'aaaaaaaaa张aaaaaaaaaaaa翠山aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa') AS out_put;
lpad (用指定的字符实现左填充指定长度)
select lpad ('殷素素',10,'*') AS out_put;
rpad (用指定的字符实现右填充指定长度)
select RPAD('殷素素',12,'ab') AS out_put;
replace(替换)
select REPLACE('周芷若周芷若周芷若周芷若张无忌爱上了周芷若','周芷若','赵敏') AS out_put;
2.数学函数
round (四舍五入)
SELECT ROUND(-1.55);
SELECT ROUND(1.567,2);
ceil (向上取整,返回>=该参数的最小整数)
SELECT CEIL(-1.02);
floor (向下取整,返回<=该参数的最大整数)
SELECT FLOOR(-9.99);
truncate (截断)
SELECT TRUNCATE(1.69999,1);
mod(取余)
SELECT MOD(10,-3);
SELECT 10%3;
3.日期函数
now(返回当前系统日期+时间)
select now();
curdate (返回当前系统日期,不包含时间)
select curdate ();
curtime (返回当前时间,不包含日期)
select curtime ();
可以获取指定的部分,年、月、日、小时、分钟、秒
select year(now()) 年;
select year('1998-1-1') 年;
select YEAR(hiredate) 年 FROM employees;
select MONTH(NOW()) 月;
select MONTHNAME(NOW()) 月;
str_to_date(将字符通过指定的格式转换成日期)
select str_to_date ('1998-3-2','%Y-%c-%d') AS out_put;
#查询入职日期为1992--4-3的员工信息
select * from employees where hiredate = '1992-4-3';
select * from employees where hiredate = str_to_date('4-3 1992','%c-%d %Y');
#date_format 将日期转换成字符
select date_format (now(),'%y年%m月%d日') as out_put;
#查询有奖金的员工名和入职日期(xx月/xx日 xx年)
select last_name,date_format(hiredate,'%m月/%d日 %y年') 入职日期 from employees
where commission_pct is not null;