三、SQL的基础查询

简介: 三、SQL的基础查询

SQL :Structured Query Language(结构化查询语言)

SQL介绍

它是操作数据库管理系统的一个标准:主要对数据库进行CRUD的操作, 数据库的运算都是通过SQL来完成的.
create:创建
delete:删除
update:修改
retrieve:检索
市面上的主流数据库都遵守SQL规范:
注:不同的数据库对SQL的支持又有些不同;

SQL根据命令功能的不同分为5个部分:

(1) DDL(Data Definition Language)数据定义语言

create,alter,drop,truncate,comment on,rename to...
以数据库表为例: 对表中结构操作 (创建表 create,修改表结构alter ,删除表 drop)

(2) DML(Data Manipulation Language)数据操纵语言

insert,update,delete
以数据库表为例: 对表中记录操作 (添加记录 insert,删除记录 delete,修改记录 update)

(3) DCL(Data Control Language)数据控制语言

grant,revoke...

(4) DQL(Data Query Language)数据查询语句

select

(5) DTL(Data Transaction Language)数据事务语言

commit,rollback,savepoint

创建表

CREATE table user 
(
  user_name  varchar(10),
  user_id    int(20),
  user_class varchar(20),
  //确定主键
  primary key(user_id));

SQL语法练习

select [distinct] 列名1 ,列名2,列名3,...  
from 表名 表别名  
where 条件

单表查询

1. 查询student表中的所有信息

select sno,sname,sage,sgender 
from student;
select *
from student;

2. 查询student表中的学号,姓名

select sno,sname
  from student

3. 给表,列取别名

select s.sno 学号,s.sname 姓名,s.sage 年龄,s.sgender  性别
from student s;

4.查询出学生表中学生的年龄

select distinct  sage
from student

条件查询

and
or
in 或者 或者
between and
is null
is not null
=  !=

5. 查询出年龄为23的学生学号,姓名,年龄,

select sno,sname,sage
from student
where sage = 23;
select sno,sname,sage
from student
where sage <> 23;
select sno,sname,sage
from student
where sage != 23;

6. 查询出年龄大于23的学生学号,姓名,年龄

select sno,sname,sage
from student
where sage >= 24;

7.查询出年龄为23的男学生学号,姓名,年龄,

select sno,sname,sage
from student
where sage = 23 and sgender='男';

8. 查询出年龄为22和23,24,25的学生学号,姓名,年龄,

select sno,sname,sage
from student
where sage = 22 or sage = 25;
select sno,sname,sage
from student
where sage in (22,23,24,25); 
 --- 等价于sage = 22 or sage = 23 or sage = 24 or sage = 25

9.查询出名称为王丽 、李波同学的详细信息

select sno,sname,sage,sgender
from student
where sname ="王丽" or sname ="李波";

like 模糊查询

通配符

  • % :任意多个任意字符
  • _ : 任意一个字符

10.查询出名字中包含'张'的学生信息

SELECT 
  s.sno,s.sname ,s.sage,s.sgender
from  
  student s
  where sname like '%张%';

11.查询出名字中第二个字符为'张'的学生信息

SELECT  s.sno,s.sname ,s.sage,s.sgender
from  student s
where sname like '_张%';

12. 查询出名字中倒数第二个字符为'力'的学生信息

SELECT s.sno,s.sname ,s.sage,s.sgender
from student s
where sname like '%力_';

13. 查询出没有绩效的员工

select *
from emp
where comm is null

14. 查询出有绩效的员工

select *
from emp
where comm is not null

15. 查询出薪资在2000-3000的员工

select *
from emp
where salary >=2000 and salary<=3000;
select *
from emp
where salary between 2000 and 3000 ;
>= , <= : 数值,日期,字符类型
between ...and ... : 数值,日期,字符类型

16. 查询出在10部门的所有的员工

select * 
from emp 
where deptno = 10;

17.查询出职位是'MANAGER'和'SALESMAN'的员工所有信息

select *
from emp
where job in('MANAGER','SALESMAN');
select *
from emp
where job = 'MANAGER' or job = 'SALESMAN'

18. 查询出员工的没有上级的员工信息

select *
from emp
where  mgr is null;

排序:order by

  • 升序 asc [默认值]
  • 降序 desc

排序语法

select
    from 表名
    where 条件表达式[or,and,is not null ,in between .. and ]
   order by 列名1 asc| desc,列名2  asc| desc

19. 查询30部门所有员工信息 ,员工编号,姓名,薪资,按照薪资的升序排列

select empno,ename,salary
from emp
where deptno = 30
order by salary asc;

20. 查询员工信息 ,员工编号,姓名,薪资,按照薪资的降序排列,若薪资相同,按照姓名的字母先后顺序排序

select empno,ename,salary
from emp
order by salary desc , ename asc;

21. 查询所有员工的绩效,若没有绩效,则用-1 替代显示

select IFNULL(comm,-1)
from emp

22. 查询所有员工的年薪(薪资12)

select ename 姓名, salary*12 年薪
from emp

23. 查询所有员工的年薪((薪资+绩效) 12 )

select ename 姓名, (salary+ ifnull(comm,0)   )*12 年薪
from emp

课堂练习

-- 1.查询部门表中所有数据
select deptno,dname,loc
from dept
-- 2.查询员工表中所有数据
SELECT empno,ename,job,mgr,hiredate,salary,comm,deptno
FROM emp
-- 4. 查询所有员工 职位
SELECT ename,job
FROM emp
-- 5. 查询所有员工 职位(去重):distinct
SELECT distinct job
FROM emp
-- ------------------- 条件查询 where -----------------------------
-- 6. 查询出薪资大于3000的员工编号,姓名与薪资
select empno,ename,salary
from emp
where salary >3000
-- 7. 查询出薪资在2000-5000之间的员工编号,姓名与薪资
select empno ,ename,salary
from emp 
where salary  between 2000 and 5000
-- 8. 查询出职位是'MANAGER'的员工编号,姓名与所在部门编号
select empno ,ename ,deptno
from emp
where 
-- 9.查询入职日期在1981-09-08之后的员工编号,姓名与入职日期
select empno,ename,hiredate
from emp 
where hiredate > '1981-09-08'
-- 10.查询处在10部门,职位是‘CLERK’员工的编号,姓名与职位
SELECT empno,ename,hiredate
FROM emp
WHERE 
-- 11. 查询出10 职位是'CLERK'员工编号,姓名与职位
-- 12.查询有绩效员工的编号,姓名
SELECT empno,ename,comm
FROM emp
WHERE comm is not null
-- 13. 查询没有绩效的员工编号,姓名 
SELECT empno,ename,comm
FROM emp
WHERE comm is null
-- 14. 查询没有上级领导的 员工编号,姓名
SELECT empno,ename mgr
FROM emp
WHERE mgr is null
-- ------------------- 模糊查询---------------------
通配符
-:任意一个字符
% : 任意多个字符
-- 
-- 15.查询出名称中以A字母开头的员工
select empno,ename
from emp
where ename like 'A%'
-- 16.查询出名称中包含DA字母的员工
select empno,ename
from emp 
where ename like '%DA%'
-- 17. 查询出名称中第三个字母是N的员工
select empno, ename
from emp 
where ename like '__N%'
-- 18. 查询出名称中倒数第二个字母是N的员工
select empno ,ename
from emp
where ename like '%N_'
-- -----------------------排序:order by ------------
-- 19.查询员工信息,按照薪资降序排序
select empno ,ename ,salary
from emp 
order by salary desc
升序:asc[默认]
降序:desc
-- 20.查询员工信息,按照薪资升序排序
select empno,ename,salary
from emp 
order by deptno ,hiredate desc
-- 21.查询员工信息,按照薪资部门编号升序排序,部门编号相同,则按照入职日期降序排序
select empno,ename,salary,deptno,hiredate
from emp
order by deptno ,hiredate desc
-- 22.查询20部门员工,按照薪资降序排序
select empno,ename,salary,deptno,hiredate
from emp
where deptno = 20
order by salary desc
-- 23. 查询出每个员工的年薪,显示编号,姓名,年薪
select empno,ename,salary*12
from emp
-- 24. 查询出每个员工每个月的总收入(薪资+绩效)
select empno,ename,(salary+ifnull(comm,0))
from emp
目录
相关文章
|
4月前
|
SQL 数据挖掘 数据库
第三篇:高级 SQL 查询与多表操作
本文深入讲解高级SQL查询技巧,涵盖多表JOIN操作、聚合函数、分组查询、子查询及视图索引等内容。适合已掌握基础SQL的学习者,通过实例解析INNER/LEFT/RIGHT/FULL JOIN用法,以及COUNT/SUM/AVG等聚合函数的应用。同时探讨复杂WHERE条件、子查询嵌套,并介绍视图简化查询与索引优化性能的方法。最后提供实践建议与学习资源,助你提升SQL技能以应对实际数据处理需求。
261 1
|
6月前
|
SQL 运维 监控
SQL查询太慢?实战讲解YashanDB SQL调优思路
本文是Meetup第十期“调优实战专场”的第二篇技术文章,上一篇《高效查询秘诀,解码YashanDB优化器分组查询优化手段》中,我们揭秘了YashanDB分组查询优化秘诀,本文将通过一个案例,助你快速上手YashanDB慢日志功能,精准定位“慢SQL”后进行优化。
|
1月前
|
SQL 人工智能 数据库
【三桥君】如何正确使用SQL查询语句:避免常见错误?
三桥君解析了SQL查询中的常见错误和正确用法。AI产品专家三桥君通过三个典型案例:1)属性重复比较错误,应使用IN而非AND;2)WHERE子句中非法使用聚合函数的错误,应改用HAVING;3)正确的分组查询示例。三桥君还介绍了学生、课程和选课三个关系模式,并分析了SQL查询中的属性比较、聚合函数使用和分组查询等关键概念。最后通过实战练习帮助读者巩固知识,强调掌握这些技巧对提升数据库查询效率的重要性。
72 0
|
6月前
|
SQL 索引
【YashanDB知识库】字段加上索引后,SQL查询不到结果
【YashanDB知识库】字段加上索引后,SQL查询不到结果
|
2月前
|
SQL
SQL中如何删除指定查询出来的数据
SQL中如何删除指定查询出来的数据
|
4月前
|
SQL 关系型数据库 MySQL
凌晨2点报警群炸了:一条sql 执行200秒!搞定之后,我总结了一个慢SQL查询、定位分析解决的完整套路
凌晨2点报警群炸了:一条sql 执行200秒!搞定之后,我总结了一个慢SQL查询、定位分析解决的完整套路
凌晨2点报警群炸了:一条sql 执行200秒!搞定之后,我总结了一个慢SQL查询、定位分析解决的完整套路
|
3月前
|
SQL 存储 弹性计算
OSS Select 加速查询:10GB CSV 文件秒级过滤的 SQL 语法优化技巧
OSS Select 可直接在对象存储上执行 SQL 过滤,跳过文件下载,仅返回所需数据,性能比传统 ECS 方案提升 10~100 倍。通过减少返回列、使用等值查询、避免复杂函数、分区剪枝及压缩优化等技巧,可大幅降低扫描与传输量,显著提升查询效率并降低成本。
|
6月前
|
SQL 人工智能 自然语言处理
OmniSQL:开源文本到SQL神器!自然语言秒转查询到复杂多表连接等SQL需求
OmniSQL是开源的文本到SQL转换模型,通过创新的数据合成框架生成250万条高质量样本,支持7B/14B/32B三种模型版本,能处理从简单查询到复杂多表连接等各种SQL需求。
581 16
OmniSQL:开源文本到SQL神器!自然语言秒转查询到复杂多表连接等SQL需求
|
6月前
|
SQL 大数据 数据挖掘
玩转大数据:从零开始掌握SQL查询基础
玩转大数据:从零开始掌握SQL查询基础
237 35
|
6月前
|
SQL 关系型数据库 MySQL
如何优化SQL查询以提高数据库性能?
这篇文章以生动的比喻介绍了优化SQL查询的重要性及方法。它首先将未优化的SQL查询比作在自助餐厅贪多嚼不烂的行为,强调了只获取必要数据的必要性。接着,文章详细讲解了四种优化策略:**精简选择**(避免使用`SELECT *`)、**专业筛选**(利用`WHERE`缩小范围)、**高效联接**(索引和限制数据量)以及**使用索引**(加速搜索)。此外,还探讨了如何避免N+1查询问题、使用分页限制结果、理解执行计划以及定期维护数据库健康。通过这些技巧,可以显著提升数据库性能,让查询更高效流畅。

热门文章

最新文章