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


     
     

    下面 是 从网络上整理 出来的 SQL 关键字和 常用函数的 释义和简单用法。

    1.1 SELECT

    SELECT 语句用于从表中选取数据。
    结果被存储在一个结果表中(称为结果集)。
    语法:
    1. SELECT 列名 FROM 表名  
    1. SELECT * FROM 表名  
    1. eg:select * from table_a;  

    1.1.1 DISTINCT

    去除查询的结果集中去掉相同行的内容,留下不同的内容。

    语法:

    1. SELECT DISTINCT(列名) FROM 表名  
    1. select distinct(id) from table_a;  

    1.1.2 TOP

    TOP子句用于规定要返回的记录数目。但并不是所有的数据库都支持该子句,比如MySql中就是用 LIMIT。

    SQL Server语法:

    1. SELECT TOP 数字|percent 列名 FROM 表名  
    1. eg: select top 3 * from table_a --查找表中的前3条数据  
    1. eg:select top 30 percent from table_a --查找表中的前30%数据  

    MySql 语法:

    1. SELECT 列名 FROM 表名 LIMIT 条数  
    1. eg: select * from table_a LIMIT 40--查询前40条数据  

    Oracle语法:

    1. SELECT 列名 FROM 表名 WHERE ROWNUM <=条数  
    1. eg:select * from table_a where rownnum <=5 --读取表中前5行数据  

    1.1.3 LIKE

    LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式。
    • like 语句常常与 SQL通配符一起使用:
    • % :替代一个或多个字符
    • _:替代一个字符
    • [charlist]:字符列表中任何一字符
    • [~charlist]:
    • 或[!charlist]:不存在字符列表中任意字符
    语法:
    1. SELECT 列名 FROM 表名 WHERE 列名 LIKE 判断方式  
    1. eg: select * from table_a where value like '%123' --查找 表中 value 值 以123作结尾的项  
    1. eg: select * from table_a where value like '123_' -- 查找表中 值以123开头的,长度为4的所有项  
    1. eg: select * from table_a where value like '[ABC]%' --查询表中值以A,,B,C任意字符开头的项  
    1. eg: select * from table_a where value like '[!ABC]%' --查询表中值不以A,,B,C任意字符开头的项  

    1.2 INSERT INTO

    INSERT INTO 像表格中插入新的行 

    语法:

    1. INSERT INTO 表名 VALUES(值1,值2);  
    1. INSERT INTO 表名(列名1,列名2)values(值1,值2);  

    1.3 UPDATE

    update修改表中的数据 

    语法:

    1. UPDATE 表名 SET 列名= 新值 WHERE 逻辑判断  
    1. eg: update table_a set value='123' where id=1;  

    1.3 DELETE

    delete用于删除表中的行 
    语法:
    1. DELETE FROM 表名 WHERE 逻辑判断  
    1. eg: DELETE table_a WHERE id = 1  

    2. 1 WHERE

    对要进行操作的表进行条件的判定补充(整删改查)。 
    语法:
    1. [SELECT][DELETE][UPDATE] 表 WHERE 运算符判定  
    1. eg: select * from table_b where id=1  

    2.1.1  AND 和 OR 运算符

    AND 和 OR 可在 WHERE 子语句中把两个或多个条件结合起来。

    如果第一个条件和第二个条件都成立,则 AND 运算符显示一条记录。

    如果第一个条件和第二个条件中只要有一个成立,则 OR 运算符显示一条记录。

    语法:

    1. [SELECT][UPDATE][DELETE] 表 WHERE 逻辑表达 [AND][OR] 逻辑表达上  
    1. eg:select * from table_a where id=1 AND value='wangch';  
    1. eg:select * from table_a where id=1 or value='wangch';  

    2.1.2 ORDER BY

    ORDER BY 语句用于根据指定的列对结果集进行排序。ORDER BY 语句默认按照升序对记录进行排序。
    • DESC:按降序进行排列(默认)。
    • ASC:按升序进行排列。
    语法:
    1. SELECT 列名 FROM 表名 ORDER BY 列名 [DESC][ASC]  
    1. eg:select * from table_a order by id desc  

    2.1.3 IN

    IN操作符允许我们在WHERE 子句中规定多个值

    语法:

    1. SELECT 列名 FROM 表名 WHERE 列名 IN(值1,值2,值3)  
    1. 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),以方便在后边书写其他逻辑判断

    表别名语法:

    1. SELECT 列名 FROM 表名 AS 别名  
    列别名语法:
    1. SELECT 列名 AS 列别名 FROM 表名  

    不做别名查找:

    1. SELECT Product_Orders.OrderID, Persons.LastName, Persons.FirstName  
    1. FROM Persons, Product_Orders  
    1. WHERE Persons.LastName='Adams' AND Persons.FirstName='John'  

    做别名查找:

    1. SELECT po.OrderID, p.LastName, p.FirstName  
    1. FROM Persons AS p, Product_Orders AS po  
    1. WHERE p.LastName='Adams' AND p.FirstName='John'  

    可以看出 使用别名可以使语句更简洁和易于阅读。

    3.2 with

    with 常常与as 连用,将查询到的结果暂时存储到一张虚表当中,然后再做操作。

    语法:

    1. with  虚表名 as (数据查询结果);  
    1. eg: with a as (SELECT * FROM table_a);  
    2. select * from a  

    3.2 JOIN

    各个表可能由于某种约束(外键等)而相关,JOIN可以根据这些关系,实现表的结合查询。

    有时为了得到完整的结果,我们需要从两个或更多的表中获取结果。

    我们就需要执行 join。数据库中的表可通过键将彼此联系起来。

    主键(Primary Key)是一个列,在这个列中的每一行的值都是唯一的。

    在表中,每个主键的值都是唯一的。这样做的目的是在不重复每个表中的所有数据的情况下,把表间的数据交叉捆绑在一起。

    语法:

    1. SELECT  列名 FROM 表名A JOIN 表名B ON 条件  
    其中如果不实用JOIN查询操作SQL语句如下的话:
    1. SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo  
    1. FROM Persons, Orders  
    1. WHERE Persons.Id_P = Orders.Id_P   
    使用JOIN查询SQL语句如下:
    1. SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo  
    1. FROM Persons  
    1. INNER JOIN Orders  
    1. 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 语句中的列的顺序必须相同。

    语法:

    1. SELECT column_name(s) FROM table_name1  
    1. UNION  
    1. SELECT column_name(s) FROM table_name2  
    UNION 默认省略相同的值,如果不需要省略,请用UNION ALL。

    3.3 SELECT INTO 

    SELECT INTO 语句从一个表中选取数据,然后插入到另外一个表中。

    语法:

    1. SELECT 列名 INTO 新表名 FROM 旧表 WHERE 逻辑判断  
    注意MySql 中不支持 SELECT INTO 字句!

    替换用法为 INSERT INTO

    比如 2个相同结构表A,B中B的数据插入A的数据 可以这样写

    1. INSERT INTO A SELECT * FROM B WHERE ...  
    将制定字段插入新表
    1. INSERT INTO A(key,value) select key,value from B WHERE ...  

    4.1 GROUP BY

    GROUP BY语句用于结合统计函数,根据一个或多个列结果集进行分组。

    语法:

    1. SELECT 列名|function(列名) FROM 表名  
    1. GROUP BY 列名  

    4.2 HAVING

    在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用。

    语法:

    1. SELECT column_name, aggregate_function(column_name)  
    1. FROM table_name  
    1. WHERE column_name operator value  
    1. GROUP BY column_name  
    1. HAVING aggregate_function(column_name) operator value  

    5. 0  SQL函数

    内建SQL函数的用法如下:

    1. 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;
  • 相关阅读:
    unset全局变量运用问题详解
    servlet
    windows 下 Eclipse+python开发环境配置
    连接mysql
    filter
    DotNetNuke 中文乱码问题的解决
    如何解决InfoPath的分页问题
    转:windows installer出错信息解决
    SQL中文全文搜索效果不理想问题的解决
    转:解决WEB页面上"焦点控制"一法
  • 原文地址:https://www.cnblogs.com/cslunatic/p/7449291.html
Copyright © 2020-2023  润新知