基础查询
语法
特点:
- 查询列表可以是表中的字段(必须有from 表名),常量值,表达式,函数
- 查询的结果是一个虚拟的表格,并不实际存在
使用特定库
use 库名
建议在查询之前都显式的选择数据库。
显示表的结构
desc 表名;
如何查询单个字段
select last_name from employees;
如何查询多个字段
select last_name,salary,email from employees;
如何查询表中的所有字段
select ... from employees;//可以直接双击字段来选择,加上的那个符号不是单引号(着重号),可以去掉。可以完成关键字的非关键化。
select * from employees;//顺序和表中的顺序一致。
查询常量值
select 100;//加上表名也不会出错,只不过没有意义。
select ‘haoer’;
注意:字符型和日期型必须用单引号引起来,数值型不需要。
MYSQL不区分单引号和双引号。
查询表达式
select 100*38;
select 100 % 98;
查询函数
select 函数名(实参列表),不能省略select,mysql中的函数必须有返回值(即不能是所谓的void)。
举例
select VERSION();//先执行对应的函数,然后将返回值返回。
起别名
作用:
- 便于理解,提高可读性
- 如果要查询的字段有重名情况,使用别名可以区分开来
- 别名使用双引号,这样可以包含空格或者特殊字符
方式1
select 100%98 as 结果;
select last_name AS 姓, first_name AS 名 from employees;
方式2
select last_name (省略AS,而使用空格)姓, first_name 名 from employees;
建议:如果有多个字段议使用as,如果只有一两个,那么就不加了吧。。
案例
查询salary 显示结果为out put
如果按照上面的方法来操作会出错
对于关键字或者特殊符号我们应该加上双引号(建议)或者是单引号
去重
加上distinct 关键字,只能对一个字段修饰。
SELECT DISTINCT `department_id` FROM employees;
mysql中的+号
仅仅只有一个功能:运算符
select 100+90; 两个操作数都为数值型,则做加法运算
select '123'+90;只要其中一方为字符型,试图将字符型数值转换成数值型,如果转换成功,则继续做加法运算
select 'john'+90; 如果转换失败,则将字符型数值转换成0
select null+10; 只要其中一方为null,则结果肯定为null
ifnull函数
功能:判断某字段或表达式是否为null,如果为null 返回指定的值,否则返回原本的值
select ifnull(commission_pct,0) from employees;
isnull函数
功能:判断某字段或表达式是否为null,如果是,则返回1,否则返回0
条件查询
语法:
select
查询列表
from
表名
where
筛选条件;(如果为true,那么显示,如果是false,那么不显示)
执行顺序
先走from,在走where,最后才是select
分类:
一、按条件表达式筛选
简单条件运算符:> < = != <> (这两个都是不等于) >= <=
二、按逻辑表达式筛选
逻辑运算符: && || ! and or not
作用:用于连接条件表达式
三、模糊查询
like一般搭配通配符使用,可以判断字符型或数值型
between and
in
is null
按条件表达式筛选
案例1:查询工资>12000的员工信息
SELECT
*
FROM
employees
WHERE
salary>12000;
案例2:查询部门编号不等于90号的员工名和部门编号
SELECT
last_name,
department_id
FROM
employees
WHERE
department_id<>90;
按逻辑表达式筛选
案例1:查询工资在10000到20000之间的员工名、工资以及奖金率
SELECT
last_name,
salary,
commission_pct
FROM
employees
WHERE
salary>=10000 AND salary<=20000;
案例2:查询部门编号不是在90到110之间,或者工资高于15000的员工信息
SELECT
*
FROM
employees
WHERE
NOT(department_id>=90 AND department_id<=110) OR salary>15000;
模糊查询
like
特点:
一般和通配符搭配使用
有哪些通配符
% 任意多个任意字符,包含0个字符
_ 任意单个字符
案例1:查询员工名中包含字符a的员工信息
select
*
from
employees
where
last_name like '%a%';
这样不会区分大小写
案例2:查询员工名中第三个字符为n,第五个字符为l的员工名和工资
select
last_name,
salary
FROM
employees
WHERE
last_name LIKE '__n_l%';
转义字符
使用\来转义通配符或者使用ESCAPE表示后面的那个字符为转义字符
案例3:查询员工名中第二个字符为_的员工名
SELECT
last_name
FROM
employees
WHERE
last_name LIKE '_$_%' ESCAPE '$';
SELECT
last_name
FROM
employees
WHERE
last_name LIKE '_\_%';
between and
①使用between and 可以提高语句的简洁度
②包含临界值
③两个临界值是有顺序的
案例1:查询员工编号在100到120之间的员工信息
SELECT
*
FROM
employees
WHERE
employee_id >= 100 AND employee_id<=120;
#----------------------
SELECT
*
FROM
employees
WHERE
employee_id BETWEEN 100 AND 120 ;
in
含义:判断某字段的值是否属于in列表中的某一项
特点
①使用in提高语句简洁度(相对于or)
②in列表的值类型必须一致或兼容
③in列表中不支持通配符
案例:查询员工的工种编号是 IT_PROG、AD_VP、AD_PRES中的一个员工名和工种编号
SELECT
last_name,
job_id
FROM
employees
WHERE
job_id = 'IT_PROT' OR job_id = 'AD_VP' OR JOB_ID ='AD_PRES';
#------------------
SELECT
last_name,
job_id
FROM
employees
WHERE
job_id IN( 'IT_PROT' ,'AD_VP','AD_PRES');
is null 和 is not null
=或<>不能用于判断null值,is null或is not null 可以判断null值
案例1:查询没有奖金的员工名和奖金率
SELECT
last_name,
commission_pct
FROM
employees
WHERE
commission_pct IS NULL;
案例2:查询有奖金的员工名和奖金率
SELECT
last_name,
commission_pct
FROM
employees
WHERE
commission_pct IS NOT NULL;
安全等于 <=>
不仅可以判断null,而且可以判断普通值
案例1:查询没有奖金的员工名和奖金率
SELECT
last_name,
commission_pct
FROM
employees
WHERE
commission_pct <=>NULL;
案例2:查询工资为12000的员工信息
SELECT
last_name,
salary
FROM
employees
WHERE
salary <=> 12000;
总结:IS NULL:仅仅可以判断NULL值,可读性较高,建议使用
<=> :既可以判断NULL值,又可以判断普通的数值,可读性较低
排序查询
语法
select 查询列表
from 表名
【where 筛选条件】(可选的)
order by 排序列表;【asc | desc】
执行顺序是从from->where->select->order by
特点:
1、asc代表的是升序,可以省略。desc代表的是降序
2、order by子句可以支持单个字段、多个字段、别名、表达式、函数
3、order by子句一般在查询语句的最后面,除了limit子句
按单个字段排序
SELECT * FROM employees ORDER BY salary DESC;
SELECT * FROM employees ORDER BY salary;
添加筛选条件再排序
案例:查询部门编号>=90的员工信息,并按员工编号降序【添加筛选条件】
SELECT *
FROM employees
WHERE department_id>=90
ORDER BY employee_id 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 年薪 ASC;
按函数排序
案例:查询员工名,并且按名字的长度降序
SELECT LENGTH(last_name) 长度,last_name
FROM employees
ORDER BY LENGTH(last_name) DESC;
按多个字段排序
案例:查询员工信息,要求先按工资降序,再按employee_id升序
SELECT *
FROM employees
ORDER BY salary DESC,employee_id ASC;
可以使用更多的字段。