博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux-MySQL基本命令-SQL语句
阅读量:6718 次
发布时间:2019-06-25

本文共 2722 字,大约阅读时间需要 9 分钟。

 

服务端命令SQL

在数据库系统中,SQL语句不区分大小写(建议用大写)

SQL语句可单行或多行书写,以“;”结尾
关键词不能跨多行或简写
用空格和缩进来提高语句的可读性
子句通常位于独立行,便于编辑,提高可读性
注释:
SQL标准:
/*注释内容*/ 多行注释
-- 注释内容 单行注释,注意有空格
MySQL注释:
#

SQL优化

查询时,能不要*就不用*,尽量写全字段名

大部分情况连接效率远大于子查询
多表连接时,尽量小表驱动大表,即小表 join 大表
在千万级分页时使用limit
对于经常使用的查询,可以开启缓存
多使用explain和profile分析查询语句
查看慢查询日志,找出执行时间长的sql语句优化

 

sql查询:单表查询和多表查询

 

两张表合并:横向合并、纵向合并

纵向合并:两张表挑出相同的字段进行合并(注意顺序)

 

范例

SQL查询范例

1、给表的字段名添加别名 select stuid as 学生编号,name 姓名,gender 性别 from students;

2、查询年龄大于40的 select * from students where age >40;

3、查找年龄大于20小于40的 select * from students where age < 40 and age > 20; select * from students where age between 20 and 40;(这种是包含)

4、查询以姓名以X开头的 select * from students where name like 'x%';

5、查找字段中为空值得信息 select * from students where classid is null;

6、查找字段值不为空得信息 select * from students where classid is not null;

7、查找报1,2,6班得学生信息 select * from students where classid in (1,2,6);

8、查找年龄,并去掉重复得年龄 select distinct age from students;

9、查询年龄,去掉重复并排序 select distinct age from students order by age;(默认正序) select distinct age from students order by age desc;(倒叙)

10、统计students表总共有多少行 select count(*) from students;

11、统计age年龄的总和 select sum(age) from students;

12、统计年龄最大的 select max(age) from students;

13、统计男女平均年龄 select gender,avg(age) from students group by gender;

14、分别统计每班的女生男生平均成绩(gender性别classid班级age成绩) select gender,classid,avg(age) from students group by gender, classid;

15、基于上条再统计女生的最大年龄 select gender,max(age) from students group by gender having gender='f'; 备注:分完组后再条件用having不能用where

16、按照课程统计没课考试最好的成绩 select courseid,max(score) as 最好成绩 from scores group by courseid;

17、取排序的前3名 select age from students order by age desc limit 3;

18、基于排序跳过2个显示3个 select age from students order by age desc limit 2,3;

多表

1、纵向合并两张表select stuid as id,name,age,gender from students union select tid,name,age,gender from teachers;2、基于上条查询 查找age字段大于50的信息select * from (select stuid as id,name,age,gender from students union select tid,name,age,gender from teachers)as b  where b.age >50;备注:利用了子查询

子查询:

查找比平均年龄大的信息select name,age from students where age >(select avg(age) from students);

交叉链接

两张表交叉链接组合select * from students cross join teachers;

内连接

取两张表的交集实现查找出学生对应的老师select s.name as 学生name,t.name as 老师name from students as s inner join teachers as t on s.teacherid=t.tid;备注:因为两种表有相同的字段,为了群分开给它加别名as,

左外链接

两张表A 和 B ,取A表和B表的与A表相关的部分,A加B的一部分select stuid,s.name,s.age,s.gender,classid,teacherid,tid,t.name,t.age,t.gender from students as s left join teachers as t on s.teacherid=t.tid;

 

有这样一个表emp

公司人员信息,即对应的领导--(leaderid领导编号)

id name leaderid
1 xiaoming null
2 wanger 1
3 zhangsan 2
4 lisi 3

现在有这样一个需求,查询每个人员对应的领导是谁

把emp表当作两张表来处理,自链接

select e.name as emp,l.name as leader from emp as e left outer join emp as l on e.leaderid=1.id;

 

 

转载地址:http://hlumo.baihongyu.com/

你可能感兴趣的文章
智能家庭本周锋闻:小米推智能插座等四件新品,“真智能家居”?
查看>>
C#程序员经常用到的10个实用代码片段
查看>>
WebP支持:超乎你想象
查看>>
XSS与XSSI区别何在?
查看>>
Wink Hub:老牌家居商的智能中控平台
查看>>
云存储时代更好的选择,你的数据由你主宰
查看>>
快速迭代的互联网研发模式下测试如何突破?
查看>>
劫持管理员权限 赛门铁克提醒用户警惕Android勒索软件
查看>>
自家应用都不支持WP系统 微软移动策略让股东怒了
查看>>
如何备份一个国家
查看>>
SDDC架构完全应用?还尚需时日……
查看>>
贵州省大数据发展驶入“信息高速公路”
查看>>
电视监控 选择摄像机技巧
查看>>
停止并重启OpenStack实例的方法
查看>>
PaperWeekly 第35期 | 如何让聊天机器人懂情感
查看>>
为什么各大网站都在启用HTTPS?
查看>>
安防市场增长势头不减 行业竞争日趋激烈
查看>>
美国太阳能光伏安装商对2016年持乐观态度
查看>>
YunOS互联万物的下一个目标会是什么?
查看>>
荣成智慧城市建设稳步推进
查看>>