zoukankan      html  css  js  c++  java
  • Linux-MySQL基本命令-SQL语句

    服务端命令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;
    

     

  • 相关阅读:
    Sysbench对Mysql进行基准测试
    yum安装软件时报错libmysqlclient.so.18()(64bit)
    redis启动报错Could not connect to Redis at 127.0.0.1:6379: 由于目标计算机积极拒绝,无法连接。
    cmd 中连接mysql时报'mysql'不是内部或外部命令,也不是可运行的程序或批处理文件
    Mysql远程连接权限
    Git基础教程
    电脑adb命令给智能电视安装APK
    python基础之类
    python基础之函数
    前端之CSS第二部分属性相关
  • 原文地址:https://www.cnblogs.com/xsuid/p/9386472.html
Copyright © 2011-2022 走看看