1.查询所有数据库
- 格式: show databases;
2.创建数据库
- 格式: create database 数据库名 charset=utf8/gbk;
- 举例:
- create database db1;
- create database db2 charset=utf8;
- create database db3 charset=gbk;
- show databases;
3.查看数据库信息
- 格式: show create database 数据库名;
- 举例:
- show create database db1;
- show create database db2;
- show create database db3;
4.删除数据库
- 格式: drop database 数据库名;
- 举例:
- drop database db2;
- drop database db3;
5.使用数据库
- 执行表相关和数据相关的SQL语句之前必须使用了某一个数据库 否则会报错.
- 格式: use 数据库名;
- 举例:
- use db1;
create database +数据库名字 charset=utf8/gbk
drop database +数据库名
insert into +数据库名 (表字段1,表字段2)values(值1,值2)
insert into +数据库名 values(值1,值2)
delete from +表名字 where +条件
update +表名字 set 值 where 条件
select 字段信息 from +表名字 where 条件
讯享网
[in(x,y,z) 查询字段的等于多个值]
当查询某个字段的值等于多个值的时候使用
[between x and y 两者之间(包含x和y)]
[is null 和is not null]
[and 和 or 和 not]
and: 等效java中的&&, 需要多个条件同时满足时使用
or: 等效java中的|| , 多个条件满足一个时使用
查询1号和2号部门中工作以市开头的员工信息
select *from emp where job like "市%" and dept_id in(1,2);
[distinct去重]
去掉重复的数据
查询员工表中出现了哪几种不同的工作select distinct job from emp;
查询员工表中出现了哪几个部门的idselect distinct dept_id from emp;
[别名]
select name as "名字" from emp;
select name "名字" from emp;
select name 名字 from emp;
*[排序 order by] [放在where后面]
格式: order by 字段名 asc升序(默认)/desc降序;
*[分组查询group by][替代掉where]
可以将某个字段相同值的数据划分为一组,然后以组为单位进行统计查询
如果题目中出现每个或每种这样的关键字 并且查询的内容为聚合函数的结果
例子:
查询每个部门的平均工资
select dept_id,avg(sal) from emp group by dept_id;
查询平均工资最高的部门id和平均工资
select dept_id,avg(sal) from emp group by dept_id order by avg(sal) desc limit 0,1;
查询工资高于2000的员工姓名和工资, 按照工资降序排序
select name,sal from emp where sal>2000 order by sal desc;
[聚合函数]
通过聚合函数可以对查询的多条数据进行统计查询
有哪些统计方式?
平均值avg
最大值max
最小值min
求和sum
计数count
平均值avg()
查询1号部门的平均工资
select avg(sal) from emp where dept_id=1;
求和sum()
查询程序员的工资总和
select sum(sal) from emp where job="程序员";
计数count(*)
查询员工表的人数
select count(*) from emp;
[having 关键字]
where后面只能写普通字段条件,不能写聚合函数条件
having后面专门写聚合函数条件,而且需要和group by分组查询结合使用,写在group by 的后面
举例:查询每个部门的平均工资,要求平均工资大于2000
select dept_id,avg(sal) from emp group by dept_id having avg(sal)>2000;
select dept_id,avg(sal) a from emp group by dept_id having a>2000; <给平均工资起个别名>
查询每种工作的人数,只查询人数大于1的
select job,count(*) c from emp group by job having c>1;
查询每个部门的工资总和,只查询有领导的员工, 并且要求工资总和大于5400.
select dept_id,sum(sal) s from emp where manager is not null group by dept_id having s>5400;
查询每个部门的平均工资, 只查询工资在1000到3000之间的,并且过滤掉平均工资低于2000的
select dept_id,avg(sal) a from emp where sal between 1000 and 3000 group by dept_id having a>=2000;
[分页查询]
格式: limit 跳过的条数,请求的条数(每页的条数)
跳过的条数= (请求的页数-1)*每页的条数
举例:查询第一页的5条数据(1-5) limit 0,5
查询第2页的5条数据(6-10) limit 5,5
查询第5页的5条数据 limit 20,5
查询第8页的10条数据 limit 70,10
查询第7页的8条数据 limit 48,8
1.查询工资最低的3个人的信息
select * from emp order by sal limit 0,3;
2.查询工资最高的员工信息
select * from emp order by sal limit 0,1;
3.按照入职日期排序 查询第2页的3条数据
select *from emp order by hiredate limit 3,3;
[子查询][又名嵌套查询]
可以将一条SQL语句查询的结果当做另外一条SQL语句条件的值
查询工资大于2号部门平均工资的员工信息
select avg(sal) from emp where dept_id=2;
select * from emp where sal>(select avg(sal) from emp where dept_id=2);
查询工资高于程序员最高工资的员工信息
select max(sal) from emp where job="程序员";
select * from emp where sal>(select max(sal) from emp where job="程序员");
查询孙悟空的部门信息(用到dept部门表)
select dept_id from emp where name="孙悟空";
select * from dept where id=(select dept_id from emp where name="孙悟空");
[关联查询]
1.[等值查询] select * from A,B where 关联关系 and 其他条件
2.[内连接] 格式: select * from A join B on 关联关系 where 条件
查询每个员工的姓名和对应的部门名
select e.name,d.name from emp e,dept d where e.dept_id=d.id;
/字符串拼接*/
concat(str1, str2,…)函数
把多个串连接起来形成一个较长的串
concat_ws(separator, str1, str2, …)函数
该函数可以一次性指定分隔符
*详细SQL字符串怎么拼接*
答:①CONCAT() 拼接字符串基本型:SELECT CONCAT ( lastname , firstname) AS student_name FROM kalacloud_student;
②2.使用空格拼接字符串:仍然使用 SELECT CONCAT() 命令,空格需要使用' ' 两个单引号引起来。SELECT CONCAT(firstname, ' ', Subject) AS StudentDetail FROM kalacloud_student;
③使用特殊符号拼接字符串:SELECT CONCAT(firstname, '-', subject, '-', qualification) AS Detail FROM kalacloud_student;
④在筛选查询中进行字符串拼接并显示在表格里:SELECT CONCAT(qualification, ' ', firstname, ' - ', subject) AS 候选人资料, wechat_id, phone FROM kalacloud_student WHERE qualification = 'MPhil';
/⑤字符串与中文文本的拼接:SELECT CONCAT('候选人:', lastname,firstname, ' 学科:',subject,' 学历:', qualification) AS 简历 FROM kalacloud_student ORDER BY qualification DESC;*/⑥CONCAT_WS() 仅需写一次分隔符即可拼接所有字符串:SELECT CONCAT_WS(' / ', firstname, phone, subject, qualification) AS Detail FROM kalacloud_student;
⑦总结:CONCAT() 字符串拼接功能在日常工作场景中使用非常频繁,但它的原理很好理解。任何非数据库中的字符串都加上' 单引号引起来即可。
```
[同时查询多张表数据的查询方式称为关联查询]()
- 如果查询的是多张表中的数据则使用关联查询:(等值链接,内连接和外连接)
- 如果查询的是多张表的交集数据,则使用等值链接或内连接(推荐)
- 如果查询的是一张表的全部和其它表的交集数据则使用外连接
- 格式: select * from A,B where 关联关系 and 其它条件

1. 查询每个员工的姓名和对应的部门名
select e.name,d.name
from emp e,dept d where e.dept_id=d.id;
1. 查询工资高于2000的员工姓名,工资和部门信息
select e.name,e.sal,d.*
from emp e,dept d where e.dept_id=d.id and sal>2000;
- 内连接和等值链接作用一样,查询到的都是两个表的交集数据,查询不到交集以外的数据
insert into emp(name,sal) values("灭霸",5);
- 格式: select * from A join B on 关联关系 where 条件
1. 查询每个员工的姓名和对应的部门名
select e.name,d.name
from emp e join dept d on e.dept_id=d.id;
1. 查询工资高于2000的员工姓名,工资和部门信息
select e.name,sal,d.*
from emp e join dept d on e.dept_id=d.id
where sal>2000;
- 作用:查询一张表的全部和另外一张表的交集数据
- 格式:select * from A left/right join B on 关联关系 where 条件;
1. 查询所有员工名和对应的部门名
select e.name,d.name
from emp e left join dept d on e.dept_id=d.id;
1. 查询所有部门名称,地点和对应的员工姓名和工资,只查询有领导的员工
select d.name,loc,e.name,sal
from emp e right join dept d on dept_id=d.id where e.manager is not null;
讯享网

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/188935.html