• sql的关键字


    整理一下sql的关键字,一直都在用,只是很少去整理,所以今天简单整理一下,主要是整理CRUD的一些关键字。
    写在前面:sql 不区分大小写

    select 简单查询语句

    select columnName from tableName where condition group by columnName having condition order by columnName desc asc limit 1;

    需要注意说明:当同时含有where子句、group by 子句 、having子句及聚集函数时,执行顺序如下:
        执行where子句查找符合条件的数据;
        使用group by 子句对数据进行分组;对group by 子句形成的组运行聚集函数计算每一组的值;最后用having 子句去掉不符合条件的组。
        having 子句中的每一个元素也必须出现在select列表中。有些数据库例外,如oracle.
        having子句和where子句都可以用来设定限制条件以使查询结果满足一定的条件限制。
        having子句限制的是组,而不是行。where子句中不能使用聚集函数,而having子句中可以。
    where在分组前过滤,having在分组后过滤
    having字段必须是查询出来的,where字段必须是数据表存在的。
    where 不可以使用字段的别名,having 可以。因为执行WHERE代码时,可能尚未确定列值。
    

    涉及到的关键字:

    • distinct:对查询列进行去重,也可以用在聚合函数中。
    • and:用于并列查询条件,左右两边的条件同时满足时才为真。例如:查询姓名为jason并且年龄为22的学生信息。 select * from student as s where s.name='jason' and s.age=22;
    • or:也用于查询条件,只要满足了左右两边条件中的一个即可,例如:查询姓名为jason或者年龄为22的学生信息。 select * from student as s where s.name='jason' or s.age=22;
    • not:表示对查询条件取反,通常和in,between..and..搭配使用。
    • between..and.. 或者 not between..and.. :用于查询条件,通常为符合某个区间的数值或者日期。
    • in 或者 not in:用于查询条件,表示只要查询的列满足其中的一个即可(not in 相反),例如:查询id为1,2,3的学生信息。select * from student as s where s.id in(1,2,3);
    • is null 或者 is not null:用于查询条件,判断某个字段列是否为空值(is not null 相反),例如:查询姓名不为空的学生信息。select * from student as s where s.name is not null;
    • like 或者 not like 后接通配符:用于查询条件,通常和 %(0或者多个),_(一个)通配符搭配使用,例如:查询姓名为j开头的学生信息。select * from student as s where s.name like 'j%';
    • exists 或者 not exists:用于查询条件,主要是用于判断某个结果是否存在于表中,如果存在则为true,否则为false。数据量很大时适合使用,而in当数据量很大时则不太适用。
    • as:用于为列或者表起别名,也可以使用空格为列或者表起别名,不建议混用。
    • *:表示查询表中符合条件的所有字段信息。
    • with: 常常与as连用,将查询到的结果暂时存储到一张虚表当中,然后再做操作。后面必须紧跟使用这个虚表的sql语句。with就是一个sql片段,供后面的sql语句引用。
      详情参见:https://www.cnblogs.com/Niko12230/p/5945133.html
      例如:with a as (SELECT * FROM table_a);
      select * from a;
    • `>,<,=,<>,!=:分别表示大于,小于,等于,不等于。
    • union(去重)/union all(不去重):可以将一个或多个 SELECT 语句的结果连接组合成一个结果集,但是必须列类型和列的个数要一致。
      例如:将学生姓名为jason的学生和学生爱好为听歌的学生查询出来(例子不恰当)
      select s.id,s.name,s.addr from student as s where s.name='jason'
      union all
      select d.id,d.name,d.addr from student as d where d.hobby='listen song';
    • intersect/intersect all(交运算,all不去重):表示获取两个查询sql结果的交集。
      类似:
      select s.id,s.name,s.addr from student as s where s.name='jason'
      intersect all
      select d.id,d.name,d.addr from student as d where d.hobby='listen song';
    • except/except all(差运算,all不去重):表示获取两个查询sql结果的差集。

    sql多表查询语句

    • inner join on :表示内连接(内连接可用where替换)
      例如:查询a表中在b表中存在id为1的数据信息
      select * from a inner join b on a.id=b.id and a.id=1;
      可以使用where子句替换为:select * from a,b where a.id=b.id and a.id=1;
      有些情况下,可以使用连接来替代子查询。因为使用join,MySQL不需要在内存中创建临时表。

    • left join on(左外连接):表示左外连接
      例如:查询a表中在b表中存在姓名j开头的数据信息(例子不恰当)
      select a.name,b.sex from a left join b on a.id=b.id and a.name like 'j%';
      它的含义是即使b表中没有与a表中匹配的数据信息,a表中的数据信息都会全部查询出来。
      left join on 后跟and和where区别
      (1)ON条件是在生成临时表时使用的条件,它不管ON中的条件是否为真,都会返回左边表中的记录;
      (2)WHERE条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有LEFT JOIN的含义(必须 返回左边表的记录)了,条件不为真的就全部过滤掉;
      (3)AND 是过滤之后再连接,WHERE是连接之后再过滤。
      (4)而inner jion没这个特殊性,则条件放在on中和where中,返回的结果集是相同的。

    • right join on(右外连接):表示右外连接
      select a.name,b.sex from a right join b on a.id=b.id and a.name like 'j%';
      它的含义与左外连接相反。

    • full join(全连接):即使数据没有在两张表中同时存在,也要返回行。
      select a.name,b.sex from a full join b on a.id=b.id and a.name like 'j%';

    sql插入语句

    insert into tablename(column) values(value);
    插入语句有四种方式,单个值插入,多个值插入,全部插入,条件插入

    第一种情况插入指定字段
    insert into table_name(column1,column2)values(value1,value2);
    第二种情况插入所有字段:前提条件是字段顺序必须与表中字段顺序一致
    insert into table_name values(value1,value2);
    第三种情况批量插入数据
    insert into table_name values (value1,value2),(value1,value2);
    也可以指定插入批量数据
    insert into table_name(column1,column2) values(value1,value2),(value1,value2);
    第四种情况就是当满足了指定条件时才插入数据
    insert into table_name(column1,column2) select value1,value2 from table_name where ...
    也就是后面select子句中查询出来的列作为前面的值插入到表中,但是这个列的个数要和前面的字段个数一致。select子句就可以随便写了。
    例如
    insert into dept(deptno,dname,loc) select 11,dept.dname,dept.loc from dept where deptno=22;
    

    sql删除语句

    delete from tablename where condition;

    sql更新语句

    update tablename set column=value where condition;

    sql更改表结构

    alter table ..add(添加属性)
    alter table..drop(删除属性)

    sql删除表

    drop table
    删除表(不可恢复):truncate

    sql常见函数

    • avg():表示求平均值
    • min():表示求最小值
    • max():表示求最大值
    • sum():表示求和
    • count():表示计数统计
  • 相关阅读:
    mysql 快速生成百万条测试数据
    DEV SIT UAT
    云计算的三层SPI模型
    go的下载
    redis主从 哨兵
    Mybatis 插入操作时获取主键 (Oracle 触发器与SEQ)
    oracle创建表空间
    mycat源码分析
    js判断是否是数字通用写法
    spring aop获取目标对象的方法对象(包括方法上的注解)
  • 原文地址:https://www.cnblogs.com/jasonboren/p/11893071.html
Copyright © 2020-2023  润新知