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