整理一下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 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 (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():表示计数统计

sql的关键字的更多相关文章

  1. //sql过滤关键字

    //sql过滤关键字 public static bool CheckKeyWord(string sWord) { //过滤关键字 string StrKeyWord = @"select ...

  2. SQL保留关键字不能用作表名

    com.microsoft.sqlserver.jdbc.SQLServerException: 关键字 'User' 附近有语法错误. 一看就是SQL语句错误,发现控制台console上打印出来的S ...

  3. 单表:SQL语句关键字的执行顺序

    表和数据: -- 创建表 CREATE TABLE `person` ( `id` ) NOT NULL AUTO_INCREMENT, `name` ) NOT NULL, `age` ) ', ` ...

  4. mybatis plus 使用 SQL 保留字(关键字)

    MybatisPlus:使用SQL保留字(关键字)的操作 必须要手动在 entity 的字段上加注解,否则最终会报错,因为 mybatis 或者 mybatis plus 不会自动处理

  5. SQL数据库关键字和列名冲突处理

    在设计SQL数据库的时候可能由于考虑不全,使列名和数据库内关键字冲突,可能导致Query不能被正确识别,对列名要加[]处理.

  6. 容斥原理及SQL in关键字在EF中的应用

    突然意识到文字的重要性,于是开始写了第一个篇博客,博客目的紧紧为记录,以便温故. 同时也希望抛砖能达到引玉的作用,欢迎各位来发表自己的感想与想法,以此达到相互学习促进! 背景: 在做百度地图电子围栏的 ...

  7. 【转】SQL 常用关键字释义和用法

    转自: http://blog.csdn.net/iamwangch/article/details/8093933     下面 是 从网络上整理 出来的 SQL 关键字和 常用函数的 释义和简单用 ...

  8. SQL中关键字的执行顺序

    作为一个SQL新手,看到每种不熟悉的关键字时已经够迷茫了,可往往见到的语句关键字顺序还是各种各样,太难理解了.网上搜索了两篇文章,总结一下: 关于Sql关键字SELECT FROM GROUP ORD ...

  9. SQL基础 关键字

    SQL语言类型 数据定义:create/alter/drop table/trigger/index/function/存储过程/约束/…数据操纵:select/update/insert/delet ...

随机推荐

  1. go命令行参数

    go命令行参数例子: package main import( "fmt" "os" "strings" ) func main(){ wh ...

  2. OpenCL Workshop 1 —— 数字音频滤波

    Introduction 这两年深度学习大火,Cuda跟着吃红利,OpenCL发展也很快.虽然OpenCL不是事实上的标准,但是作为开放标准,适应性是很强的,除了显卡之外,CPU/FPGA上都可以执行 ...

  3. gitlib的安装

    下载ruby yum -y install gcc gcc-c++ make wget https://cache.ruby-lang.org/pub/ruby/2.1/ruby-2.1.9.tar. ...

  4. Camera 录制视频的实现

    使用 Camera 录制视频, 实现步骤如下: 需要权限: android.permission.CAMERA android.permission.RECORD_AUDIO android.perm ...

  5. SHA加密

    import java.security.MessageDigest; /** * 提供SHA加密 */ public class SHAUtil { // 进行SHA-1加密 public stat ...

  6. python函数的执行过程

    对于 Python 常规函数,都只有一个入口,但会有多个出口如 return 返回或者抛出异常.函数从入口进入会一直运行到 return 语句或者抛出异常,中间不会暂停,函数一直拥有控制权.当运行结束 ...

  7. 数据中心网络架构的问题与演进 — 混合云与 VPC 专有网络

    目录 文章目录 目录 前文列表 历史背景 混合云 Why hybrid cloud? 混合云市场 混合云的逻辑架构 混合云应用场景 灾难恢复 数据备份 负载扩容 应用部署 开发测试生产部署 混合云产品 ...

  8. SpringMVC中实现Bean Validation(JSR 303 JSR 349 JSR 380)

    JSR 303是针对bean数据校验提出的一个规范.使用注解方式实现数据校验. 每个注解的用法这里就不多介绍,请移步JSR 303 - Bean Validation 介绍及最佳实践 笔者上面提到的J ...

  9. HBase管理与监控——彻底删除HBase数据

    1.hadoop的bin目录下,执行命令以下命令清除Hbase数据 hadoop fs -rm -r /hbase 2.连接ZK,执行以下命令清除Hbase数据 rmr /hbase 3.重启ZK.重 ...

  10. 树莓派-Ubuntu Mate开启远程桌面xrdp服务

    树莓派3B+安装Ubuntu Mate后,开启远程桌面xrdp服务可以使用KRDC或mstsc远程登录访问,感觉比vnc要快一些: $ sudo apt install xrdp 安装后重启xrdp服 ...