【转】SQL 常用关键字释义和用法
下面 是 从网络上整理 出来的 SQL 关键字和 常用函数的 释义和简单用法。
1.1 SELECT
SELECT 语句用于从表中选取数据。结果被存储在一个结果表中(称为结果集)。语法:
- SELECT 列名 FROM 表名
- SELECT * FROM 表名
- eg:select * from table_a;
1.1.1 DISTINCT
去除查询的结果集中去掉相同行的内容,留下不同的内容。语法:
- SELECT DISTINCT(列名) FROM 表名
- select distinct(id) from table_a;
1.1.2 TOP
TOP子句用于规定要返回的记录数目。但并不是所有的数据库都支持该子句,比如MySql中就是用 LIMIT。SQL Server语法:
- SELECT TOP 数字|percent 列名 FROM 表名
- eg: select top 3 * from table_a --查找表中的前3条数据
- eg:select top 30 percent from table_a --查找表中的前30%数据
MySql 语法:
- SELECT 列名 FROM 表名 LIMIT 条数
- eg: select * from table_a LIMIT 40--查询前40条数据
Oracle语法:
- SELECT 列名 FROM 表名 WHERE ROWNUM <=条数
- eg:select * from table_a where rownnum <=5 --读取表中前5行数据
1.1.3 LIKE
LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式。
- like 语句常常与 SQL通配符一起使用:
- % :替代一个或多个字符
- _:替代一个字符
- [charlist]:字符列表中任何一字符
- [~charlist]:
- 或[!charlist]:不存在字符列表中任意字符
语法:
- SELECT 列名 FROM 表名 WHERE 列名 LIKE 判断方式
- eg: select * from table_a where value like '%123' --查找 表中 value 值 以123作结尾的项
- eg: select * from table_a where value like '123_' -- 查找表中 值以123开头的,长度为4的所有项
- eg: select * from table_a where value like '[ABC]%' --查询表中值以A,,B,C任意字符开头的项
- eg: select * from table_a where value like '[!ABC]%' --查询表中值不以A,,B,C任意字符开头的项
1.2 INSERT INTO
INSERT INTO 像表格中插入新的行
语法:
- INSERT INTO 表名 VALUES(值1,值2);
- INSERT INTO 表名(列名1,列名2)values(值1,值2);
1.3 UPDATE
update修改表中的数据
语法:
- UPDATE 表名 SET 列名= 新值 WHERE 逻辑判断
- eg: update table_a set value='123' where id=1;
1.3 DELETE
delete用于删除表中的行
语法:
- DELETE FROM 表名 WHERE 逻辑判断
- eg: DELETE table_a WHERE id = 1
2. 1 WHERE
对要进行操作的表进行条件的判定补充(整删改查)。
语法:
- [SELECT][DELETE][UPDATE] 表 WHERE 运算符判定
- eg: select * from table_b where id=1
2.1.1 AND 和 OR 运算符
AND 和 OR 可在 WHERE 子语句中把两个或多个条件结合起来。
如果第一个条件和第二个条件都成立,则 AND 运算符显示一条记录。
如果第一个条件和第二个条件中只要有一个成立,则 OR 运算符显示一条记录。
语法:
- [SELECT][UPDATE][DELETE] 表 WHERE 逻辑表达 [AND][OR] 逻辑表达上
- eg:select * from table_a where id=1 AND value='wangch';
- eg:select * from table_a where id=1 or value='wangch';
2.1.2 ORDER BY
ORDER BY 语句用于根据指定的列对结果集进行排序。ORDER BY 语句默认按照升序对记录进行排序。
- DESC:按降序进行排列(默认)。
- ASC:按升序进行排列。
语法:
- SELECT 列名 FROM 表名 ORDER BY 列名 [DESC][ASC]
- eg:select * from table_a order by id desc
2.1.3 IN
IN操作符允许我们在WHERE 子句中规定多个值
语法:
- SELECT 列名 FROM 表名 WHERE 列名 IN(值1,值2,值3)
- eg: select * from table_a where id in (1,2,3) -- 查询 表中id 分别为 1,2,3的结果
2.1.4 BETWEEN ...AND...
BETWEEN AND 会选取介于2个值之间的数据范围。
- 数值
- 文本
- 日期
3.1 别名
在做查询操作的时候,可以给查询的数据库指定一个别名(Alias),以方便在后边书写其他逻辑判断
表别名语法:
- SELECT 列名 FROM 表名 AS 别名
列别名语法:
- SELECT 列名 AS 列别名 FROM 表名
不做别名查找:
- SELECT Product_Orders.OrderID, Persons.LastName, Persons.FirstName
- FROM Persons, Product_Orders
- WHERE Persons.LastName='Adams' AND Persons.FirstName='John'
做别名查找:
- SELECT po.OrderID, p.LastName, p.FirstName
- FROM Persons AS p, Product_Orders AS po
- WHERE p.LastName='Adams' AND p.FirstName='John'
可以看出 使用别名可以使语句更简洁和易于阅读。
3.2 with
with 常常与as 连用,将查询到的结果暂时存储到一张虚表当中,然后再做操作。
语法:
- with 虚表名 as (数据查询结果);
- eg: with a as (SELECT * FROM table_a);
- select * from a
3.2 JOIN
各个表可能由于某种约束(外键等)而相关,JOIN可以根据这些关系,实现表的结合查询。
有时为了得到完整的结果,我们需要从两个或更多的表中获取结果。
我们就需要执行 join。数据库中的表可通过键将彼此联系起来。
主键(Primary Key)是一个列,在这个列中的每一行的值都是唯一的。
在表中,每个主键的值都是唯一的。这样做的目的是在不重复每个表中的所有数据的情况下,把表间的数据交叉捆绑在一起。
语法:
- SELECT 列名 FROM 表名A JOIN 表名B ON 条件
其中如果不实用JOIN查询操作SQL语句如下的话:
- SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
- FROM Persons, Orders
- WHERE Persons.Id_P = Orders.Id_P
使用JOIN查询SQL语句如下:
- SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
- FROM Persons
- INNER JOIN Orders
- ON Persons.Id_P = Orders.Id_P
其中 具有不同的SQL JOIN 方式
- JOIN | INNER JOIN: 如果表中有至少一个匹配,则返回行 内连接
- LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行 左连接
- RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行 右连接
- FULL JOIN: 只要其中一个表中存在匹配,就返回行 全连接
3.3 UNION
union 用户合并多个SELECT 的查询结果集。
请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。
语法:
- SELECT column_name(s) FROM table_name1
- UNION
- SELECT column_name(s) FROM table_name2
UNION 默认省略相同的值,如果不需要省略,请用UNION ALL。
3.3 SELECT INTO
SELECT INTO 语句从一个表中选取数据,然后插入到另外一个表中。
语法:
- SELECT 列名 INTO 新表名 FROM 旧表 WHERE 逻辑判断
注意MySql 中不支持 SELECT INTO 字句!
替换用法为 INSERT INTO
比如 2个相同结构表A,B中B的数据插入A的数据 可以这样写
- INSERT INTO A SELECT * FROM B WHERE ...
将制定字段插入新表
- INSERT INTO A(key,value) select key,value from B WHERE ...
4.1 GROUP BY
GROUP BY语句用于结合统计函数,根据一个或多个列结果集进行分组。
语法:
- SELECT 列名|function(列名) FROM 表名
- GROUP BY 列名
4.2 HAVING
在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用。
语法:
- SELECT column_name, aggregate_function(column_name)
- FROM table_name
- WHERE column_name operator value
- GROUP BY column_name
- HAVING aggregate_function(column_name) operator value
5. 0 SQL函数
内建SQL函数的用法如下:
- SELECT function(列) FROM 表
其中内建函数分为:
- Aggregate 函数 (合计函数)
- Scalar 函数
Aggregate 函数
函数 | 描述 |
---|---|
AVG(column) | 返回某列的平均值 |
BINARY_CHECKSUM | |
CHECKSUM | |
CHECKSUM_AGG | |
COUNT(column) | 返回某列的行数(不包括NULL值) |
COUNT(*) | 返回被选行数 |
COUNT(DISTINCT column) | 返回相异结果的数目 |
FIRST(column) | 返回在指定的域中第一个记录的值(SQLServer2000 不支持) |
LAST(column) | 返回在指定的域中最后一个记录的值(SQLServer2000 不支持) |
MAX(column) | 返回某列的最高值 |
MIN(column) | 返回某列的最低值 |
STDEV(column) | |
STDEVP(column) | |
SUM(column) | 返回某列的总和 |
VAR(column) | |
VARP(column) |
Scalar 函数
Scalar 函数的操作面向某个单一的值,并返回基于输入值的一个单一的值。
函数 | 描述 |
---|---|
UCASE(c) | 将某个域转换为大写 |
LCASE(c) | 将某个域转换为小写 |
MID(c,start[,end]) | 从某个文本域提取字符 |
LEN(c) | 返回某个文本域的长度 |
INSTR(c,char) | 返回在某个文本域中指定字符的数值位置 |
LEFT(c,number_of_char) | 返回某个被请求的文本域的左侧部分 |
RIGHT(c,number_of_char) | 返回某个被请求的文本域的右侧部分 |
ROUND(c,decimals) | 对某个数值域进行指定小数位数的四舍五入 |
MOD(x,y) | 返回除法操作的余数 |
NOW() | 返回当前的系统日期 |
FORMAT(c,format) | 改变某个域的显示方式 |
DATEDIFF(d,date1,date2) | 用于执行日期计算 |
6.0 SQL多表查询
表结构:
emp表:
dept表:
salgrade表:
(1)查出至少有一个员工的部门。显示部门编号、部门名称、部门位置、部门人数。
SELECT z.*,d.dname,d.loc
FROM dept d, (SELECT deptno, COUNT(*) cnt FROM emp GROUP BY deptno) z
WHERE z.deptno=d.deptno;
(2)列出薪金比张三高的所有员工。
SELECT *
FROM emp e
WHERE e.sal > (SELECT sal FROM emp WHERE ename='张三')
(3)列出所有员工的姓名及其直接上级的姓名。
SELECT e.ename, IFNULL(m.ename, 'BOSS') AS lead
FROM emp e LEFT JOIN emp m
ON e.mgr=m.empno;
(4)列出受雇日期早于直接上级的所有员工的编号、姓名、部门名称。
SELECT e.empno, e.ename, d.dname
FROM emp e LEFT JOIN emp m ON e.mgr=m.empno
LEFT JOIN dept d ON e.deptno=d.deptno
WHERE e.hiredate<m.hiredate;
(5)列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门。
SELECT e.*, d.dname
FROM emp e RIGHT JOIN dept d
ON e.deptno=d.deptno;
(6)列出所有工作为文员的姓名及其部门名称,部门的人数。
SELECT e.ename, d.dname, z.cnt
FROM emp e, (SELECT deptno, COUNT(*) cnt FROM emp GROUP BY deptno) z, dept d
WHERE e.deptno=d.deptno AND z.deptno=d.deptno AND e.job='文员';
(7)列出最低薪金大于15000的各种工作及从事此工作的员工人数。
SELECT job, COUNT(*)
FROM emp e
GROUP BY job
HAVING MIN(sal) > 15000;
(8)列出在销售部工作的员工的姓名,假定不知道销售部的部门编号。
SELECT e.ename
FROM emp e
WHERE e.deptno = (SELECT deptno FROM dept WHERE dname='销售部');
(9)列出薪金高于公司平均薪金的所有员工信息,所在部门名称,上级领导,工资等级。
SELECT e.*, d.dname, m.ename, s.grade
FROM emp e NATURAL LEFT JOIN dept d
LEFT JOIN emp m ON m.empno=e.mgr
LEFT JOIN salgrade s ON e.sal BETWEEN s.losal AND s.hisal
WHERE e.sal > (SELECT AVG(sal) FROM emp);
(10)列出与庞统从事相同工作的所有员工及部门名称。
SELECT e.*, d.dname
FROM emp e, dept d
WHERE e.deptno=d.deptno AND e.job=(SELECT job FROM emp WHERE ename='庞统');
(11)列出薪金高于在部门30工作的所有员工的薪金的员工姓名和薪金、部门名称。
SELECT e.ename, e.sal, d.dname
FROM emp e, dept d
WHERE e.deptno=d.deptno AND sal > ALL(SELECT sal FROM emp WHERE deptno=30)
(12)列出在每个部门工作的员工数量、平均工资。
SELECT d.dname, e.cnt, e.avgsal
FROM (SELECT deptno, COUNT(*) cnt, AVG(sal) avgsal FROM emp GROUP BY deptno) e, dept d
WHERE e.deptno=d.deptno;
【转】SQL 常用关键字释义和用法的更多相关文章
- SQL常用关键字
常用SQL语句 SAP实际上提供了两种访问数据库的方式:Open SQL与Native SQL ---语句 功能 数据操作 insert 向表添加新数据行 delete 从表中删除数据行 upda ...
- Delphi常用关键字用法详解
本文详细介绍了Delphi中常用的各个关键字名称及用法,供大家在编程过程中借鉴参考之用.详情如下: absolute: ? 1 2 3 4 5 6 7 8 9 10 //它使得你能够创建一个新变量, ...
- WPF中的常用布局 栈的实现 一个关于素数的神奇性质 C# defualt关键字默认值用法 接口通俗理解 C# Json序列化和反序列化 ASP.NET CORE系列【五】webapi整理以及RESTful风格化
WPF中的常用布局 一 写在开头1.1 写在开头微软是一家伟大的公司.评价一门技术的好坏得看具体的需求,没有哪门技术是面面俱到地好,应该抛弃对微软和微软的技术的偏见. 1.2 本文内容本文主要内容 ...
- Sql常用语法以及名词解释
Sql常用语法以及名词解释 SQL分类: DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE) DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT) D ...
- sql 常用语法汇总
Sql常用语法 SQL分类: DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE) DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT) DCL—数据控 ...
- SQL常用函数总结
SQL常用函数总结 这是我在项目开发中使用db2数据库写存储过程的时候经常用到的sql函数.希望对大家有所帮助: sql cast函数 (1).CAST()函数的参数是一个表达式,它包括用AS关键字分 ...
- PL/SQL常用设置 可看引用位置更清晰直观 引自:http://blog.csdn.net/xiaoqforever/article/details/27695569
引自:http://blog.csdn.net/xiaoqforever/article/details/27695569 1,登录后默认自动选中My Objects 默认情况下,PLSQL Deve ...
- SQL中EXISTS和IN用法
SQL中EXISTS的用法 指定一个子查询,检测行的存在. 语法:EXISTS subquery 参数:subquery 是一个受限的 SELECT 语句 (不允许有 COMPUTE 子句和 INT ...
- AppiumLibrary常用关键字
通过上一章节,open application关键字的使用,相信大家对手机自动化充满了兴趣,那么今天这一章节,主要介绍AppiumLibrary中常用关键字的使用. 一.实用函数 关键字 含义 实例 ...
随机推荐
- LeetCode DB : Delete Duplicate Emails
Write a SQL query to delete all duplicate email entries in a table named Person, keeping only unique ...
- Java 并发:Future FutureTask
Future 当向一个ExecutorService提交任务后可以获得一个Future对象,在该对象上可以调用get,cancel等命令来获取任务运行值或者是取消任务.下面是一个简单的计数任务: pu ...
- 深入理解CSS3 gradient斜向线性渐变——张鑫旭
by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpress/?p=3639 一.问题没有想 ...
- 自定义高级版python线程池
基于简单版创建类对象过多,现自定义高级版python线程池,代码如下 #高级线程池 import queue import threading import time StopEvent = obje ...
- 从零开始学习html(十一)CSS盒模型——上
一.元素分类 在CSS中,html中的标签元素大体被分为三种不同的类型:块状元素.内联元素(又叫行内元素)和内联块状元素. 常用的块状元素有: <div>.<p>.<h1 ...
- 高性能JavaScript(编程实践)
避免双重求值JavaScript 允许你在程序中提取一个包含代码的字符串,然后动态执行,有四种方法可以实现,eval(),Function() 构造函数 settimeout 和 setinterva ...
- Mariadb MySQL、Mariadb中GROUP_CONCAT函数使用介绍
MySQL.Mariadb中GROUP_CONCAT 函数使用介绍 By:授客 QQ:1033553122 语法: GROUP_CONCAT([DISTINCT] column_name [ORDER ...
- 机器学习实战(Machine Learning in Action)学习笔记————04.朴素贝叶斯分类(bayes)
机器学习实战(Machine Learning in Action)学习笔记————04.朴素贝叶斯分类(bayes) 关键字:朴素贝叶斯.python.源码解析作者:米仓山下时间:2018-10-2 ...
- Cordova 8 架构使用sqlite - 谢厂节的博客 - 博客频道 - CSDN.NET - Google Chrome
Cordova 8 架构使用sqlite 标签: androidcordova 2015-07-16 16:41 4302人阅读 评论(0) 收藏 举报 分类: IONIC/Cordova(18) ...
- 结合 Redis 实现同步锁
1.技术方案 1.1.redis的基本命令 1)SETNX命令(SET if Not eXists) 语法:SETNX key value 功能:当且仅当 key 不存在,将 key 的值设为 val ...