MySQL基础查询

本文详细介绍了SQL查询的基础语法,包括基础查询、条件查询、排序查询和分组查询。重点讲解了各种查询方式的用法,如LIKE、BETWEEN、IN和IS NULL等条件,以及ORDER BY和GROUP BY子句的应用。此外,还探讨了连接查询的不同类型,如等值连接和外连接,并解释了子查询在不同位置的使用场景。这些内容对于理解和掌握SQL查询至关重要。
摘要由CSDN通过智能技术生成

基础查询

语法: select 查询列表(可以是多个字段) from 表名;

1. 起别名:select 查询列表 as(或者是空格) 别名名字;
2. 查询表达式(/运算时保留4位小数)
select   100/17;
select   100%98;

条件查询

语法: select 查询列表 from 表名 where 筛选条件;

  1. 按条件表达式筛选:
    简单条件运算符:> 、<、 =、 !=、 <>、 >=、 <=

  2. 按逻辑表达式筛选:
    逻辑运算符:
    作用:用于连接条件表达式
    &&, || ,!
    and,or,not

  3. 模糊查询:

    like 特点:
    ①一般和通配符搭配使用
    通配符:
    % 任意多个字符,包含0个字符
    _ 任意单个字符
    
    between and 特点:
    ①使用between and 可以提高语句的简洁度
    ②包含临界值
    ③两个临界值不要调换顺序
    例:employee_id >= 120 AND employee_id<=100; 和 employee_id BETWEEN 120 AND 100; 作用一样
    
    in 特点:
    含义:判断某字段的值是否属于in列表中的某一项
    特点:
    ①使用in提高语句简洁度
    ②in列表的值类型必须一致或兼容
    ③in列表中不支持通配符
    例:job_id = 'IT_PROT' OR job_id = 'AD_VP' OR JOB_ID ='AD_PRES'; 和 job_id IN( 'IT_PROT' ,'AD_VP','AD_PRES'); 作用一样
    is null 特点:
    =或<>不能用于判断null值
    is null或is not null 可以判断null值
    例:commission_pct IS NULL;
        commission_pct IS NOT NULL;	
    

排序查询

语法: select 查询列表 from 表名 where 筛选条件 order by 排序列表 asc(默认升序) / desc(降序);

 1. 按单个字段排序:
	 SELECT * FROM employees ORDER BY salary DESC;
 2. 添加筛选条件再排序:
	 SELECT  * FROM employees WHERE department_id >= 90 ORDER
	 BY employee_id DESC;
 3. 按表达式排序:
	 SELECT *,salary*12*(1+IFNULL(commission_pct,0))
	FROM employees
	ORDER BY salary*12*(1+IFNULL(commission_pct,0)) DESC;
 4. 按别名排序:
	SELECT *,salary*12*(1+IFNULL(commission_pct,0)) 年薪	
	FROM employees
	ORDER BY 年薪 ASC;
	
 5. 按函数排序:
	SELECT LENGTH(first_name) as 姓名长度,first_name	
	FROM employees
	ORDER BY LENGTH(first_name) DESC;
 6. 按多个字段排序:
	SELECT *
	FROM employees
	ORDER BY salary DESC,employee_id ASC

分组查询:

语法:

 1. select 查询列表 , 分组字段 
     from 表名 
     where 条件 
     group by 分组的字段 
     having 筛选条件 
     order by 排序的字段;
     (分组后的筛选:有having,分组前的筛选:where)
针对的表位置连接的关键字
分组前的筛选原始表group by前where
分组后的筛选group by 后的结果集group by后having

连接查询

用处: 当查询的字段来自于多个表时

sql92语法:
select (查询列表)
from	(1 别名,2 别名)
where	(连接条件)
and	 [筛选条件]
group by  [分组]
having	 [筛选条件]
order by [排序列表]
sql92标准:

1、等值连接
① 多表等值连接的结果为多表的交集部分
②n表连接,至少需要n-1个连接条件
③ 多表的顺序没有要求
④一般需要为表起别名
⑤可以搭配前面介绍的所有子句使用,比如排序、分组、筛选
2、注意:如果为表起了别名,则查询的字段就不能使用原来的表名去限定

sql99语法:
select	(查询列表)
from	(1 别名 [连接类型])
join	(2 别名)
on		(连接条件)
where	[筛选条件]
group by [分组]
having	[筛选条件]
order by [排序列表]

外连接

特点:

 1. 外连接的查询结果为主表的所有记录
		如果从表中有和它匹配的,则显示匹配的值
		如果从表中没有和它匹配的,则显示null	
		外连接查询结果=内连接结果+主表中有而从表没有的记录
 2. 左外连接,left join左边的是主表(前面)
		右外连接,right join右边的是主表	(后表)
		
 3. 左外和右外交换两个表的顺序,可以实现同样的效果
 4. 全外连接=内连接的结果+表1中有但表2没有的+表2中有但表1没有的,即交集和并集
 5. 主表和从表的判定:要查询的信息主要来自于哪个表,则哪个表是主表

语法:

SELECT COUNT(*) 个数,city
FROM departments d,locations l
WHERE d.location_id=l.location_id  //链接条件
GROUP BY city;

子查询

含义: 出现在其他语句中的select语句,称为子查询或内查询外部的查询语句,称为主查询或外查询

分类:

按子查询出现的位置:
	select后面:
		仅仅支持标量子查询
	from后面:
		支持表子查询
	where或having后面:★
		标量子查询(单行) √
		列子查询  (多行) √
		行子查询	
	exists后面(相关子查询)
		表子查询

用法:

一、where或having后面
/*
1、标量子查询(单行子查询)
2、列子查询(多行子查询)
3、行子查询(多列多行)

特点:
①子查询放在小括号内
②子查询一般放在条件的右侧
③标量子查询,一般搭配着单行操作符使用
> < >= <= = <>

列子查询,一般搭配着多行操作符使用
in、any/some、all

标量子查询:

#②查询员工的信息,满足 salary>①结果
SELECT *
FROM employees
WHERE salary>(
	SELECT salary
	FROM employees
	WHERE last_name = 'Abel'
);

#③查询员工的姓名,job_id 和工资,要求job_id=①并且salary>②
SELECT last_name,job_id,salary
FROM employees
WHERE job_id = (
	SELECT job_id
	FROM employees
	WHERE employee_id = 141
) AND salary>(
	SELECT salary
	FROM employees
	WHERE employee_id = 143
);

列子查询(多行子查询,即结果是单列多行):

#②查询员工姓名,要求部门号是①列表中的某一个
SELECT last_name
FROM employees
WHERE department_id in(
	SELECT DISTINCT department_id
	FROM departments
	WHERE location_id IN(1400,1700)
);
#②查询员工号、姓名、job_id 以及salary,salary<(①)的任意一个
SELECT last_name,employee_id,job_id,salary
FROM employees
WHERE salary<ANY(
	SELECT DISTINCT salary
	FROM employees
	WHERE job_id = 'IT_PROG'

) AND job_id<>'IT_PROG';

行子查询(结果集一行多列或多行多列):

#3、行子查询(结果集一行多列或多行多列)
SELECT *
FROM employees
WHERE employee_id=(
	SELECT MIN(employee_id)
	FROM employees
)AND salary=(
	SELECT MAX(salary)
	FROM employees
);

from后子查询(查询结果充当table):

select * from 表1 a, (select 字段1, 字段2 from 表2 where ...) b
					/*子查询充当一张表b*/
select name, add_time
from goods g, (select price, id from orders where...) a
where...;

exists查询(判断后面的条件是否成立,成立则执行前面语法)

#查询orders表中是否存在goods_id值为5的记录,
#如果存在,则查询goods表中id值小于5的记录。
select * 
from goods 
where id < 5 
exists (select * from orders where goods_id = 5); 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

轩尼诗道-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值