02基础查询和排序查询

基础查询

语法

在这里插入图片描述

特点:

  • 查询列表可以是表中的字段(必须有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*38select 100 % 98;

查询函数

select 函数名(实参列表),不能省略select,mysql中的函数必须有返回值(即不能是所谓的void)。
举例

select VERSION();//先执行对应的函数,然后将返回值返回。

起别名

作用:

  • 便于理解,提高可读性
  • 如果要查询的字段有重名情况,使用别名可以区分开来
  • 别名使用双引号,这样可以包含空格或者特殊字符
方式1
	select 100%98 as 结果;
	select last_name AS 姓, first_name ASfrom 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;

可以使用更多的字段。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值