• sql基本概念与语法(摘自w3school)


    一、SQL DML 和 DDL

    可以把 SQL 分为两个部分:数据操作语言 (DML) 和 数据定义语言 (DDL)SQL (结构化查询语言)是用于执行查询的语法。但是 SQL 语言也包含用于更新、插入和删除记录的语法。

    查询和更新指令构成了 SQL 的 DML 部分:

    • SELECT - 从数据库表中获取数据
    • UPDATE - 更新数据库表中的数据
    • DELETE - 从数据库表中删除数据
    • INSERT INTO - 向数据库表中插入数据

    SQL 的数据定义语言 (DDL) 部分使我们有能力创建或删除表格。我们也可以定义索引(键),规定表之间的链接,以及施加表间的约束。

    SQL 中最重要的 DDL 语句:

    • CREATE DATABASE - 创建新数据库
    • ALTER DATABASE - 修改数据库
    • CREATE TABLE - 创建新表
    • ALTER TABLE - 变更(改变)数据库表
    • DROP TABLE - 删除表
    • CREATE INDEX - 创建索引(搜索键)
    • DROP INDEX - 删除索引

     

    二、select语句

    SELECT 列名称 FROM 表名称                           --*表示所有

    SELECT DISTINCT 列名称 FROM 表名称               --去掉重复

     

    三、where子句

    SELECT 列名称 FROM 表名称 WHERE 列 运算符 值

    下面的运算符可在 WHERE 子句中使用:

    操作符

    描述

    =

    等于

    <>

    不等于

    >

    大于

    <

    小于

    >=

    大于等于

    <=

    小于等于

    BETWEEN

    在某个范围内

    LIKE

    搜索某种模式

    注释:在某些版本的 SQL 中,操作符 <> 可以写为 !=

     

    四、oderby 子句

    ORDER BY 语句用于对结果集进行排序。

    DESC 降序  ASC 升序

     

    五、insert语句

    INSERT INTO 表名称 VALUES (1, 2,....)

     

    六、update语句

    UPDATE 表名称 SET 列名称 新值 WHERE 列名称 某值

     

    七、delete语句

    DELETE FROM 表名称 WHERE 列名称 

     

    八、Top子句

    SELECT TOP number|percent column_name(s)

    FROM table_name

     

    九、like操作符

    SELECT column_name(s)

    FROM table_name

    WHERE column_name LIKE pattern

    SQL 通配符必须与 LIKE 运算符一起使用。

    在 SQL 中,可使用以下通配符:

    通配符

    描述

    %

    替代一个或多个字符

    _

    仅替代一个字符

    [charlist]

    字符列中的任何单一字符

    [^charlist]

    或者

    [!charlist]

    不在字符列中的任何单一字符

     

    十、in 操作符

    SELECT column_name(s)

    FROM table_name

    WHERE column_name IN (value1,value2,...)

     

    十一、between 操作符

    SELECT column_name(s)

    FROM table_name

    WHERE column_name

    BETWEEN value1 AND value2

    如需使用上面的例子显示范围之外的人,请使用 NOT 操作符

     

    十二、Join

    • JOIN: 如果表中有至少一个匹配,则返回行
    • LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
    • RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
    • FULL JOIN: 只要其中一个表中存在匹配,就返回行

    SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo

    FROM Persons, Orders

    WHERE Persons.Id_P = Orders.Id_P

     

    十三、inner join

    SELECT column_name(s)

    FROM table_name1

    INNER JOIN table_name2 

    ON table_name1.column_name=table_name2.column_name

    注释:INNER JOIN 与 JOIN 是相同的。

     

    十四、left join

    SELECT column_name(s)

    FROM table_name1

    LEFT JOIN table_name2 

    ON table_name1.column_name=table_name2.column_name

    原始的表 (用在例子中的)

    "Persons" 表:

    Id_P

    LastName

    FirstName

    Address

    City

    1

    Adams

    John

    Oxford Street

    London

    2

    Bush

    George

    Fifth Avenue

    New York

    3

    Carter

    Thomas

    Changan Street

    Beijing

     

    "Orders" 表:

    Id_O

    OrderNo

    Id_P

    1

    77895

    3

    2

    44678

    3

    3

    22456

    1

    4

    24562

    1

    5

    34764

    65

    左连接(LEFT JOIN)实例

    现在,我们希望列出所有的人,以及他们的定购 如果有的话。

    您可以使用下面的 SELECT 语句:

    SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo

    FROM Persons

    LEFT JOIN Orders

    ON Persons.Id_P=Orders.Id_O

    ORDER BY Persons.LastName

    结果集:

    LastName

    FirstName

    OrderNo

    Adams

    John

    22456

    Adams

    John

    24562

    Carter

    Thomas

    77895

    Carter

    Thomas

    44678

    Bush

    George

     

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

     

    十五、full join

    原始的表 (用在例子中的)

    "Persons" 表:

    Id_P

    LastName

    FirstName

    Address

    City

    1

    Adams

    John

    Oxford Street

    London

    2

    Bush

    George

    Fifth Avenue

    New York

    3

    Carter

    Thomas

    Changan Street

    Beijing

    "Orders" 表:

    Id_O

    OrderNo

    Id_P

    1

    77895

    3

    2

    44678

    3

    3

    22456

    1

    4

    24562

    1

    5

    34764

    65

    全连接(FULL JOIN)实例

    现在,我们希望列出所有的人,以及他们的定单,以及所有的定单,以及定购它们的人。

    您可以使用下面的 SELECT 语句:

    SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo

    FROM Persons

    FULL JOIN Orders

    ON Persons.Id_P=Orders.Id_P

    ORDER BY Persons.LastName

    结果集:

    LastName

    FirstName

    OrderNo

    Adams

    John

    22456

    Adams

    John

    24562

    Carter

    Thomas

    77895

    Carter

    Thomas

    44678

    Bush

    George

     

     

     

    34764

    FULL JOIN 关键字会从左表 (Persons) 和右表 (Orders) 那里返回所有的行。如果 "Persons" 中的行在表 "Orders" 中没有匹配,或者如果 "Orders" 中的行在表 "Persons" 中没有匹配,这些行同样会列出。

    十七、Union操作符

    SQL UNION 语法

    SELECT column_name(s) FROM table_name1

    UNION

    SELECT column_name(s) FROM table_name2

    注释:默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL

    SQL UNION ALL 语法

    SELECT column_name(s) FROM table_name1

    UNION ALL

    SELECT column_name(s) FROM table_name2

    另外,UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。

    下面的例子中使用的原始表:

    Employees_China:

    E_ID

    E_Name

    01

    Zhang, Hua

    02

    Wang, Wei

    03

    Carter, Thomas

    04

    Yang, Ming

    Employees_USA:

    E_ID

    E_Name

    01

    Adams, John

    02

    Bush, George

    03

    Carter, Thomas

    04

    Gates, Bill

    使用 UNION 命令

    实例

    列出所有在中国和美国的不同的雇员名:

    SELECT E_Name FROM Employees_China

    UNION

    SELECT E_Name FROM Employees_USA

     

    结果

    E_Name

    Zhang, Hua

    Wang, Wei

    Carter, Thomas

    Yang, Ming

    Adams, John

    Bush, George

    Gates, Bill

    注释:这个命令无法列出在中国和美国的所有雇员。在上面的例子中,我们有两个名字相同的雇员,他们当中只有一个人被列出来了。UNION 命令只会选取不同的值。

    UNION ALL 命令和 UNION 命令几乎是等效的,不过 UNION ALL 命令会列出所有的值。

    实例:

    列出在中国和美国的所有的雇员:

    SELECT E_Name FROM Employees_China

    UNION ALL

    SELECT E_Name FROM Employees_USA

    结果

    E_Name

    Zhang, Hua

    Wang, Wei

    Carter, Thomas

    Yang, Ming

    Adams, John

    Bush, George

    Carter, Thomas

    Gates, Bill

     

    十八、select into 语句

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

    SELECT INTO 语句常用于创建表的备份复件或者用于对记录进行存档。

    您可以把所有的列插入新表:

    SELECT *

    INTO new_table_name [IN externaldatabase] 

    FROM old_tablename

     

    或者只把希望的列插入新表:

    SELECT column_name(s)

    INTO new_table_name [IN externaldatabase] 

    FROM old_tablename

     

    十九、create table

    数据类型(data_type)规定了列可容纳何种数据类型。下面的表格包含了SQL中最常用的数据类型:

    数据类型

    描述

     integer(size)

     int(size)

     smallint(size)

     tinyint(size)

     

    仅容纳整数。在括号内规定数字的最大位数。

     decimal(size,d)

     numeric(size,d)

     

    容纳带有小数的数字。

    "size" 规定数字的最大位数。"d" 规定小数点右侧的最大位数。

    char(size)

    容纳固定长度的字符串(可容纳字母、数字以及特殊字符)。

    在括号中规定字符串的长度。

    varchar(size)

    容纳可变长度的字符串(可容纳字母、数字以及特殊的字符)。

    在括号中规定字符串的最大长度。

    date(yyyymmdd)

    容纳日期。

     

    二十、sql 约束

    • NOT NULL
    • UNIQUE
    • PRIMARY KEY
    • FOREIGN KEY
    • CHECK
    • DEFAULT

    二十一、foreign key

    FOREIGN KEY 约束用于预防破坏表之间连接的动作。

    FOREIGN KEY 约束也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一

    CREATE TABLE Orders

    (

    O_Id int NOT NULL PRIMARY KEY,

    OrderNo int NOT NULL,

    Id_P int FOREIGN KEY REFERENCES Persons(Id_P)

    )

    二十二、check 约束

    如果对单个列定义 CHECK 约束,那么该列只允许特定的值。

    如果对一个表定义 CHECK 约束,那么此约束会在特定的列中对值进行限制。

    二十三、default 约束

    CREATE TABLE Persons

    (

    Id_P int NOT NULL,

    LastName varchar(255) NOT NULL,

    FirstName varchar(255),

    Address varchar(255),

    City varchar(255) DEFAULT 'Sandnes'

    )

     

    二十四、create index 索引

    您可以在表中创建索引,以便更加快速高效地查询数据。

    用户无法看到索引,它们只能被用来加速搜索/查询。

    CREATE INDEX PersonIndex

    ON Person (LastName DESC)

     

    二十五、alter

    ALTER TABLE table_name

    ADD column_name datatype

    ALTER TABLE table_name 

    DROP COLUMN column_name

    ALTER TABLE table_name

    ALTER COLUMN column_name datatype

     

    二十六、AUTO INCREMENT 字段

    默认地,AUTO_INCREMENT 的开始值是 1,每条新记录递增 1

    ALTER TABLE Persons AUTO_INCREMENT=100

     

    二十七、create view

    CREATE VIEW view_name AS

    SELECT column_name(s)

    FROM table_name

    WHERE condition

     

    SQL 更新视图

    您可以使用下面的语法来更新视图:

    SQL CREATE OR REPLACE VIEW Syntax

    CREATE OR REPLACE VIEW view_name AS

    SELECT column_name(s)

    FROM table_name

    WHERE condition

    SQL 撤销视图

    您可以通过 DROP VIEW 命令来删除视图。

    SQL DROP VIEW Syntax

    DROP VIEW view_name

     

    二十八、sql 日期

    MySQL Date 函数

    下面的表格列出了 MySQL 中最重要的内建日期函数:

    函数

    描述

    NOW()

    返回当前的日期和时间

    CURDATE()

    返回当前的日期

    CURTIME()

    返回当前的时间

    DATE()

    提取日期或日期/时间表达式的日期部分

    EXTRACT()

    返回日期/时间按的单独部分

    DATE_ADD()

    给日期添加指定的时间间隔

    DATE_SUB()

    从日期减去指定的时间间隔

    DATEDIFF()

    返回两个日期之间的天数

    DATE_FORMAT()

    用不同的格式显示日期/时间

     

    SQL Server Date 函数

    下面的表格列出了 SQL Server 中最重要的内建日期函数:

    函数

    描述

    GETDATE()

    返回当前日期和时间

    DATEPART()

    返回日期/时间的单独部分

    DATEADD()

    在日期中添加或减去指定的时间间隔

    DATEDIFF()

    返回两个日期之间的时间

    CONVERT()

    用不同的格式显示日期/时间

    SQL Date 数据类型

    MySQL 使用下列数据类型在数据库中存储日期或日期/时间值:

    • DATE - 格式 YYYY-MM-DD
    • DATETIME - 格式: YYYY-MM-DD HH:MM:SS
    • TIMESTAMP - 格式: YYYY-MM-DD HH:MM:SS
    • YEAR - 格式 YYYY 或 YY

    SQL Server 使用下列数据类型在数据库中存储日期或日期/时间值:

    • DATE - 格式 YYYY-MM-DD
    • DATETIME - 格式: YYYY-MM-DD HH:MM:SS
    • SMALLDATETIME - 格式: YYYY-MM-DD HH:MM:SS
    • TIMESTAMP - 格式唯一的数字

    二十九、数据类型

    不同数据的区别  (***********************

     

    三十、函数

    在 SQL Server 中的合计函数

    函数

    描述

    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)

     

     

  • 相关阅读:
    gitlab: git clone/pull / push: The project you were looking for could not be found
    转载: MySQL启动出错InnoDB: Check that you do not already have another mysqld process解决方法
    root用户删除文件,提示:Operation not permitted
    使用dockerfile打包新镜像
    kubernets创建Deployment
    代理全家福
    Spring事务传播详解
    [FFmpeg]Centos7 yum安装
    [Redis]存放字典
    [Docker]开放2375端口
  • 原文地址:https://www.cnblogs.com/hidewsj/p/3192493.html
Copyright © 2020-2023  润新知