SQL

作者: LINPENGISTHEONE | 来源:发表于2019-04-17 18:07 被阅读0次

    【persons表】

    persons.jpg

    【info表】

    info.jpg

    创建一个名为 "my_db" 的数据库。

    CREATE DATABASE my_db;
    
    image.png

    创建名为 "PersON" 的表。该表包含 5 个列,列名分别是:
    "Id_P"、"LastName"、"FirstName"、"Address" 以及 "City"

    CREATE TABLE Persons
    (
    Id_P int,
    LAStName varchar(255),
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255)
    );
    

    插入新的行

    INSERT INTO 
    Persons 
    VALUES ('1','Ming', 'Yao', '1 road', 'Shanghai');
    

    在指定的列中插入数据

    INSERT INTO 
    persons (LastName,FirstName,Address,City) 
    VALUE ('carter','vince','air road','U.S.A');
    

    更新某一行中的一个列

    UPDATE 
    persons 
    SET Id_P='2' WHERE LastName='carter';
    

    更新某一行中的若干列

    UPDATE 
    persons 
    SET id_p='3',FirstName='yao',Address='pudong' 
    WHERE LastName='ming';
    

    删除某行

    DELETE 
    FROM persons 
    WHERE LastName='ming';
    

    删除所有行
    可以在不删除表的情况下删除所有的行。这意味着表的结构、属性和索引都是完整的

    DELETE FROM 
    persons;
    
    DELETE * 
    FROM persons;
    

    TOP 子句用于规定要返回的记录的数目。
    对于拥有数千条记录的大型表来说,TOP 子句是非常有用的。
    注释:并非所有的数据库系统都支持 TOP 子句。

    SELECT * 
    FROM persons LIMIT 2;
    

    LIKE 操作符
    LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式。

    1、从上面的 "Persons" 表中选取居住在以 "U" 开始的城市里的人
    
    SELECT * 
    FROM persons 
    WHERE city LIKE 'U%';
    
    2、从上面的 "Persons" 表中选取居住在以 "g" 结尾的城市里的人
    
    SELECT * 
    FROM persons 
    WHERE city LIKE '%g';
    
    3、从 "Persons" 表中选取居住在包含 "ei" 的城市里的人
    
    SELECT * 
    FROM persons 
    WHERE city LIKE '%ei%';
    
    4、从 "Persons" 表中选取居住在不包含 "ei" 的城市里的人
    
    SELECT * 
    FROM persons 
    WHERE city NOT LIKE '%ei%';
    
    5、从 "Persons" 表中选取的这条记录的姓氏以 "C" 开头,
       然后是一个任意字符,然后是 "r",然后是任意字符,然后是 "er"
    
    SELECT * 
    FROM Persons 
    WHERE LastName LIKE 'c_r_er';
    

    IN 操作符允许我们在 WHERE 子句中规定多个值
    从上表中选取FirstName为 vince 和 bill 的人

    SELECT * 
    FROM persons 
    WHERE FirstName IN ('vince','bill');
    
    SELECT * 
    FROM persons 
    WHERE FirstName NOT IN ('vince','bill');
    

    操作符 BETWEEN ... AND 会选取介于两个值之间的数据范围。
    这些值可以是数值、文本或者日期。
    显示介于 "1"和 "3"之间的人

    SELECT * 
    FROM persons 
    WHERE Id_P BETWEEN '1' AND '3';
    
    SELECT * 
    FROM persons 
    WHERE Id_P NOT BETWEEN '1' AND '3';
    

    AliAS 为列名称和表名称指定别名

    假设我们有两个表分别是:"Persons" 和 "Product_Orders"。
    我们分别为它们指定别名 "p" 和 "po"。
    现在,我们希望列出 "John Adams" 的所有定单
    
    SELECT po.OrderID, p.LastName, p.FirstName
    FROM Persons AS p, Product_Orders AS po
    WHERE p.LastName='Adams' AND p.FirstName='John'
    
    使用一个列名别名
    SELECT LastName AS Family, FirstName AS Name FROM Persons;
    
    结果
    Family  Name
    Ming    Yao
    Carter  Vince
    Wade    Dwyane
    Rose    Derrick
    Nowitzki    Dirk
    Lin       Jeremy
    GINóbili    Manu
    

    INNER JOIN 获取两个表中字段匹配关系的记录

    SELECT persons.LastName,persons.FirstName,persons.City,
    info.Height,info.Weight,info.Position 
    FROM persons
    JOIN info 
    ON persons.Id_P=info.Id_P;
    
    SELECT p.LastName,p.FirstName,p.City,i.Height,i.Weight,i.PositiON 
    FROM persons AS p
    JOIN info AS i
    ON p.Id_P=i.Id_P;
    

    LEFT JOIN 与 JOIN 有所不同。 MySQL LEFT JOIN 会读取左边数据表的全部数据,即便右边表无对应数据

    SELECT p.LastName,p.FirstName,p.City,i.Height,i.Weight,i.PositiON 
    FROM persons AS p
    LEFT JOIN info AS i
    ON p.LastName=i.LastName;
    

    RIGHT JOIN 会读取右边数据表的全部数据,即便左边边表无对应数据

    SELECT p.LastName,p.FirstName,p.City,i.Height,i.Weight,i.PositiON 
    FROM persons AS p
    RIGHT JOIN info AS i
    ON p.LastName=i.LastName;
    

    UNION 操作符用于合并两个或多个 SELECT 语句的结果集
    默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL

    SELECT LastName
    FROM persons
    UNION
    SELECT LastName
    FROM info;
    

    NOT NULL 约束
    NOT NULL 约束强制列不接受 NULL 值。
    NOT NULL 约束强制字段始终包含值。这意味着,如果不向字段添加值,就无法插入新记录或者更新记录

    CREATE TABLE Persons
    (
    Id_P int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255)
    );
    

    UNIQUE 约束
    UNIQUE 约束唯一标识数据库表中的每条记录。
    UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。
    PRIMARY KEY 拥有自动定义的 UNIQUE 约束。
    请注意,每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束

    CREATE TABLE Persons
    (
    Id_P int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255),
    UNIQUE (Id_P)
    );
    

    PRIMARY KEY 约束
    PRIMARY KEY 约束唯一标识数据库表中的每条记录。
    主键必须包含唯一的值。
    主键列不能包含 NULL 值。
    每个表都应该有一个主键,并且每个表只能有一个主键

    CREATE TABLE Persons
    (
    Id_P int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255),
    PRIMARY KEY (Id_P)
    );
    

    FOREIGN KEY 约束
    一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY

    CREATE TABLE Orders
    (
    Id_O int NOT NULL,
    OrderNo int NOT NULL,
    Id_P int,
    PRIMARY KEY (Id_O),
    FOREIGN KEY (Id_P) REFERENCES PersONs(Id_P)
    );
    

    DROP TABLE语句用于删除表(表的结构、属性以及索引也会被删除)

    DROP TABLE info;
    

    TRUNCATE TABLE 语句仅仅需要除去表内的数据,但并不删除表本身

    TRUNCATE TABLE info;
    

    ALTER TABLE 语句用于在已有的表中添加、修改或删除列

    ALTER TABLE info 
    ADD Id_P int;
    
    ALTER TABLE info 
    DROP COLUMN Id_P;
    

    VIEW(视图)
    什么是视图?
    在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表。
    视图包含行和列,就像一个真实的表。视图中的字段就是来自一个或多个数据库中的真实的表中的字段。
    我们可以向视图添加 SQL 函数、WHERE 以及 JOIN 语句,我们也可以提交数据,就像这些来自于某个单一的表。
    注释:数据库的设计和结构不会受到视图中的函数、where 或 join 语句的影响。

    CREATE VIEW 语法

    CREATE VIEW view_name AS
    SELECT column_name(s)
    FROM table_name
    WHERE condition
    

    IS NULL选取在 "Address" 列中带有 NULL 值的记录

    SELECT LastName,FirstName,Address 
    FROM Persons
    WHERE Address IS NULL;
    

    NOT NULL选取在 "Address" 列中不带有 NULL 值的记录

    SELECT LastName,FirstName,Address 
    FROM Persons
    WHERE Address IS NOT NULL;
    

    AVG() 语法 AVG 函数返回数值列的平均值。NULL 值不包括在计算中

    选择info表里面大于平均身高的球员

    SELECT FirstName,LastName 
    FROM info 
    WHERE Height>(SELECT AVG(Height) FROM info);
    

    COUNT(column_name) 函数返回指定列的值的数目(NULL 不计入)
    计算位置为SG的数量

    SELECT COUNT(POSITION) FROM info WHERE POSITION='SG';
    

    ORDER BY 排序
    升序

    SELECT * 
    FROM players_info
    ORDER BY Weight ASC;
    
    image.png
    降序
    SELECT * 
    FROM players_info
    ORDER BY Weight DESC;
    
    image.png
    GROUP BY 数据分组
    统计球衣号码相同的数量
    SELECT Number AS 球衣号码,COUNT(*) AS 合计
    FROM players_info
    GROUP BY Number;
    
    image.png

    相关文章

      网友评论

          本文标题:SQL

          本文链接:https://www.haomeiwen.com/subject/ueanwqtx.html