MySql数据库学习笔记(四)数据查询
一、基础查询
select 查询列表 from 表名;
1、查询列表可以是:表中的字段、常量值、表达式、函数
2、查询结果是一个虚拟的表格
1,查询表中的单个字段
select stu_name from student;
2,查询表中的多个字段
select stu_id,stu_name,stu_sdept from student;
3,查询表中的全部字段
select * from student;
4,查询常量值
select 常量(整型、字符…);// 注意:字符型和日期型的常量值必须用单引号引起来,数值型不需要
5,查询表达式
select 100%98;
//结果为2
6,查询函数
select 函数名;
例:select version();
7,为字段起别名
-
便于理解
-
如果要查询的字段名有重名情况,使用别名可以区分开来
方式一:
select stu_id as 学号 ,stu_name as 姓名 from student;
方式二:
select stu_id 学号 ,stu_name 姓名 from student;
另外:如果起的别名有关键字或特殊符号,需要用双引号进行标记。
例如:select stu_sdept as "out put" from student;
8,去重 select distinct 字段名 from 表名;
select distinct stu_id from student;
9, +号的作用
/*
java中的+号:
1,运算符,两个操作数都为数值型
2,连接符,只要有一个操作数为字符串
mysql中的+号
错误示范:select stu_id+stu_name from student;
只有一个功能:运算符
select 100+90;
两个操作数都为数值型,则做加法运算。
select '123' + 90;
只要其中一方为字符型,试图讲字符型数值转换成数值型
如果转换成功,则继续加法运算。
select 'join'+10;
如果转换失败,则将字符型数值转换成0
select null+10;
只要其中一方为null,则结果肯定为null
*/
字段拼接用concat()函数
- 字符拼接:
select concat('a','b','c') as 结果;
- 字段拼接:
select concat(stu_id,stu_name) as 姓名;
ISNULL(参数)函数:判断某字段、表达式是否为空,如果是,则返回1,否则返回0
二、条件查询
语法:select 查询列表 from 表名 where 筛选条件;
特点:
1,按表达式筛选
条件运算符:>、<、=、!=、<>、>=、<=
例:查询工资>12000的员工信息
select * from employees where salary>12000;
例:查询部门编号不等于90号的员工名和部门编号
select last_name,department_id from employees where department_id != 90;
或者 select last_name,department_id from employees where department_id <> 90;
2,按逻辑表达式筛选
逻辑运算符:and (&&)、or (||)、not (!)
例:查询工资在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;
或者select * from employees where not(department_id >= 90 and department_id <= 110) or salary > 15000;
3、模糊查询
-
like
特点:% 任意多个字符; _ 任意单个字符; 可用于筛选字符型数值或数值型数值
例:查询员工名中包含字母a的员工信息
select * from employees where last_name like '%a%'
//不区分所查字符的大小写例:查询员工名中第三个字符为e,第五个字符为a的员工名和工资
select last_name 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 '$';
//escape 指定转义字符 -
between and
- 使用between and 可以提高语句的简洁度
- 包含临界值
- 临界值顺序不可颠倒
例:查询编号在100到120之间的员工信息
select * from employees where employees_id >= 100 and employees_id <= 120;
select * from employees where employees_id between 100 and 120;
//包含临界值
-
in
- 使用in 提高了语句的简洁度
- in列表的值类型必须一致或兼容
例:查询员工的工种编号是IT_PROT、AD_VP、AD_PRES中的一个员工名和工种编号
select last_name,job_id from employees where job_id = 'IT_PROG' or job_id = 'AD_VP' or job_id = 'AD_PRES';
select last_name,job_id from employees where job_id in('IT_PROG','AD_VP','AD_PRES');
-
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 <=> null;
例:查询工资为12000的员工信息
select * from employees where salary<=> 12000;
<=>和is null比较:
is null:仅仅可以判断null值,可读性较高,建议使用
<=> :既可以判断null值,又可以判断普通数值,可读性较低
例题:查询员工号为176的员工的姓名和部门号和年薪
select last_name,department_id,salary*12(1+ifnull(,0)) as 年薪 from employees where employee_id = 176;
三、排序查询
1,语法
select 查询列表 from where 筛选条件 order by 排序列表 asc(升序)|desc(降序);
例1:查询员工信息,要求工资从高到低排序
select * from employees order by salary desc;
//从高到低排序
select * f rom employees order by salary asc;
//从低到高排序
特点:
-
asc代表的是升序,desc代表的是降序,如果不写,默认是升序
-
order by 子句中可以支持单个字段、多个字段、表达式、函数、别名。
-
order by 子句一般是放在查询语句的最后面,limit子句除外
例2:查询部门编号>=90的员工信息,按入职时间的先后进行排序 (添加筛选条件)
select * from employees where department_id >= 90 order by hiredate asc;
例3:按年薪的高低显示员工的信息和年薪 (按表达式排序)
select *, salary*12*(1+ifnull(commission_pct,0)) as 年薪 from employees where department_id >= 90 order by salary*12*(1+ifnull(commission_pct,0)) desc;
例4:按年薪的高低显示员工的信息和年薪 (按别名排序)
select *, salary*12*(1+ifnull(commission_pct,0)) as 年薪 from employees where department_id >= 90 order by 年薪 desc;
例5:按姓名的长度显示员工的姓名和工资
SELECT LENGTH(last_name) AS 字节长度,last_name,salary FROM employees ORDER BY LENGTH(last_name) DESC;
例:查询员工信息,要求先按工资排序,再按员工编号排序(按多个字段排序)
SELECT * FROM employees ORDER BY salary ASC, employee_id DESC;