• SQL语句编写


     本章主要介绍SQL中简单编写——参考W3school

    一、查询Select

    1. distinst--截然不同的,查询结果中中不存在相同的列

    CompanyOrderNumber
    IBM 3532
    W3School 2356
    Apple 4698
    W3School 6953
    select distinct Company from Orders;
    Company
    IBM
    W3School
    Apple
    W3School

     2. order by *** desc / asc--分类排序,默认升序asc

    select Company, OrderNumber from orders order by Company desc, OrderNumber asc;
    CompanyOrderNumber
    W3School 2356
    W3School 6953
    IBM 3532
    Apple 4698

     二、插入 Insert

    insert into table_name values (值1, 值2 ...);
    insert into table_name(列1,列2...) values (值1,值2...);

     三、更新 Update

    update table_name set 列名称 = 新值 where 列名称 = 某值;
    update Person set FirstName = 'Fred', Address = 'Nanjing' where LastName = 'Wilson' ;

     四、删除 Delete

    delete from table_name where 列名称 = 值;

     五、进阶

    1. top:用于规定返回记录的数目

    select top 2 * from table_name;//取前两条记录
    select top 50 percent * from table_name;//取前百分之五十记录

     2.通配符

    通配符描述
    % 替代一个或多个字符
    _ 仅替代一个字符
    [charlist] 字符列中的任何单一字符

    [^charlist]或者[!charlist]

    不在字符列中的任何单一字符
    SELECT * FROM Persons WHERE FirstName LIKE '_eorge';
    SELECT * FROM Persons WHERE LastName LIKE 'C_r_er';
    SELECT * FROM Persons WHERE City LIKE '[ALN]%';//选取居住的城市以 "A" 或 "L" 或 "N" 开头的人
    SELECT * FROM Persons WHERE City LIKE '[!ALN]%'//选取居住的城市不是以 "A" 或 "L" 或 "N" 开头的人

     3. in:允许我们在WHERE子句中规定多个值

    SELECT column_name(s)
    FROM table_name
    WHERE column_name IN (value1,value2,...)

    4. between:在 WHERE 子句中使用,作用是选取介于两个值之间的数据范围

    SELECT column_name(s)
    FROM table_name
    WHERE column_name
    BETWEEN value1 AND value2;

      NOT BETWEEN:获取范围之外的数据

    5. as:别名

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

    6. join

    "Persons" 表:

    Id_PLastNameFirstNameAddressCity
    1 Adams John Oxford Street London
    2 Bush George Fifth Avenue New York
    3 Carter Thomas Changan Street Beijing

    "Orders" 表:

    Id_OOrderNoId_P
    1 77895 3
    2 44678 3
    3 22456 1
    4 24562 1
    5 34764 65

    ① INNER JOIN:两表共同部分

    SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
    FROM Persons
    INNER JOIN Orders
    ON Persons.Id_P=Orders.Id_P
    ORDER BY Persons.LastName
    LastNameFirstNameOrderNo
    Adams John 22456
    Adams John 24562
    Carter Thomas 77895
    Carter Thomas 44678

    ② LEFT JOIN:关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行。

    SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
    FROM Persons
    LEFT JOIN Orders
    ON Persons.Id_P=Orders.Id_P
    ORDER BY Persons.LastName
    LastNameFirstNameOrderNo
    Adams John 22456
    Adams John 24562
    Carter Thomas 77895
    Carter Thomas 44678
    Bush George  

      ③RIGHT JOIN:关键字会右表 (table_name2) 那里返回所有的行,即使在左表 (table_name1) 中没有匹配的行。

    SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
    FROM Persons
    RIGHT JOIN Orders
    ON Persons.Id_P=Orders.Id_P
    ORDER BY Persons.LastName
    LastNameFirstNameOrderNo
    Adams John 22456
    Adams John 24562
    Carter Thomas 77895
    Carter Thomas 44678
        34764

    ④ FULLJOIN: 只要其中某个表存在匹配,FULL JOIN 关键字就会返回行。

    SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
    FROM Persons
    FULL JOIN Orders
    ON Persons.Id_P=Orders.Id_P
    ORDER BY Persons.LastName
    LastNameFirstNameOrderNo
    Adams John 22456
    Adams John 24562
    Carter Thomas 77895
    Carter Thomas 44678
    Bush George  
        34764

    六、SQL函数

    O_IdOrderDateOrderPriceCustomer
    1 2008/12/29 1000 Bush
    2 2008/11/23 1600 Carter
    3 2008/10/05 700 Bush
    4 2008/09/28 300 Bush
    5 2008/08/06 2000 Adams
    6 2008/07/21 100 Carter

    1. AVG():平均数

      找到 OrderPrice 值高于 OrderPrice 平均值的客户

    SELECT Customer FROM Orders
    WHERE OrderPrice>(SELECT AVG(OrderPrice) FROM Orders)
    Customer
    Bush
    Carter
    Adams

    2. COUNT():返回匹配指定条件的行数

    SELECT COUNT(DISTINCT Customer) AS NumberOfCustomers 
    FROM Orders
    NumberOfCustomers
    3

    3. FIRST():返回指定的字段中第一个记录的值

    SELECT FIRST(OrderPrice) AS FirstOrderPrice FROM Orders
    FirstOrderPrice
    1000

     4. LAST():返回指定的字段中最后一个记录的值。

     5. MAX()/MIN():返回一列中的最大/小值。NULL 值不包括在计算中。

    SELECT MAX(OrderPrice) AS LargestOrderPrice FROM Orders
    LargestOrderPrice
    2000

    6. SUM():返回数值列的总数(总额)。

    7. GROUP BY():分组

    SELECT Customer,SUM(OrderPrice) FROM Orders
    GROUP BY Customer
    CustomerSUM(OrderPrice)
    Bush 2000
    Carter 1700
    Adams 2000

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

    SELECT Customer,SUM(OrderPrice) FROM Orders
    GROUP BY Customer
    HAVING SUM(OrderPrice)<2000
    CustomerSUM(OrderPrice)
    Carter 1700

    9. UCASE() / LCASE():字段的值转换为大/小写。

    10. MID():从文本字段中提取字符。

    SELECT MID(column_name,start[,length]) FROM table_name
    //column_name    必需。要提取字符的字段。
    //start    必需。规定开始位置(起始值是 1)。
    //length    可选。要返回的字符数。如果省略,则 MID() 函数返回剩余文本。
    //例如MID(name, 1, 3)就是返回满足条件的name的前三个字符

    11. LEN():返回文本字段的长度。

    12. ROUND():把数值字段舍入为指定的小数位数。

    SELECT ROUND(column_name,decimals) FROM table_name;
    //column_name    必需。要舍入的字段。
    //decimals    必需。规定要返回的小数位数。

    13. NOW():返回当前日期和时间。

    14. FORMAT():用于对字段的显示进行格式化。

    SELECT FORMAT(column_name,format) FROM table_name;
    //column_name    必需。要格式化的字段。
    //format    必需。规定格式。
    例如 FORMAT(Now(),'YYYY-MM-DD')
    输出 12/29/2008

     15. wherehere & having

    1. where后不能加聚合函数.
    2. where的搜索条件是在执行语句进行分组之前应用, having的搜索条件是在分组条件后执行的,即如果where和having一起用时,where会先执行,having后执行.
    3. where子句用来筛选 FROM 子句中指定的操作所产生的行。having子句用来从分组的结果中筛选行。GROUP BY 子句用来分组 WHERE 子句的输出。
    4. where可以用于select、update、delete和insert into values(select * from table where ..)语句中。having只能用于select语句中.
  • 相关阅读:
    Java8 Period.between方法坑及注意事项
    mybatis入门-第一个程序
    mybatis入门-框架原理
    初识servlet--未完成
    初识servlet
    session是什么
    session工作原理简介
    笔记本维修介绍
    j2se 总结
    maven
  • 原文地址:https://www.cnblogs.com/qmillet/p/12599898.html
Copyright © 2020-2023  润新知