• Sql学习内容


    基础部分:
    SQL分为两个部分:数据操作语言(DML)和数据定义语言(DDL) 数据库管理系统和关系数据库管理系统
    查询和更新指令构成了 SQL 的 DML 部分:
    SELECT - 从数据库表中获取数据
    UPDATE - 更新数据库表中的数据
    DELETE - 从数据库表中删除数据
    INSERT INTO - 向数据库表中插入数据

    SQL 中最重要的 DDL 语句:
    CREATE DATABASE - 创建新数据库
    ALTER DATABASE - 修改数据库
    CREATE TABLE - 创建新表
    ALTER TABLE - 变更(改变)数据库表
    DROP TABLE - 删除表
    CREATE INDEX - 创建索引(搜索键)
    DROP INDEX - 删除索引

    SELECT语法:
    select 列名称 From 表名称/ select * from 表名称
    实例:SELECT LastName,FirstName FROM Persons
    去除重复值:SELECT DISTINCT 列名称 FROM 表名称
    实例:SELECT DISTINCT Company From Orders

    WHERE子句语法:
    SELECT 列名称 FROM 表名称 WHERE 列 运算符 值
    文本实例:SELECT * FROM Persons WHERE FirstName='Bush'
    数值实例:SELECT * FROM Persons WHERE Year>1965
    总结:文本的值用'',数值不加单引号

    And和Or运算符:
    SELECT * FROM Persons WHERE FirstName='Thomas' AND LastName='Carter'
    SELECT * FROM Persons WHERE firstname='Thomas' OR lastname='Carter'
    组合And和Or运算符:
    SELECT * FROM Persons WHERE (FirstName='Thomas' OR FirstName='William') AND LastName='Carter'

    order by语句(ASC为升序,DESC为降序):
    SELECT Company, OrderNumber FROM Orders ORDER BY Company
    以字母顺序显示公司名称(Company),并以数字顺序显示顺序号(OrderNumber):
    SELECT Company, OrderNumber FROM Orders ORDER BY Company, OrderNumber
    以逆字母顺序显示公司名称:
    SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC
    以逆字母顺序显示公司名称,并以数字顺序显示顺序号:
    SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC, OrderNumber ASC
    结果:
    Company OrderNumber
    W3School 2356
    W3School 6953
    IBM 3532
    Apple 4698

    insert into语句:
    insert into 表名 values (值1,值2,值3)
    指定数据插入的列:insert into table_name (列1,列2,列3) values (值1,值2,值3)
    实例:
    INSERT INTO Persons VALUES ('Gates', 'Bill', 'Xuanwumen 10', 'Beijing')
    INSERT INTO Persons (LastName, Address) VALUES ('Wilson', 'Champs-Elysees')
    update语句:
    update 表名 set 列名称 = 新值 where 列名称=某值
    实例:
    更新某一行中的一个列:UPDATE Person SET FirstName = 'Fred' WHERE LastName = 'Wilson'
    更新某一行中的若干列:UPDATE Person SET Address = 'Zhongshan 23', City = 'Nanjing' WHERE LastName = 'Wilson'
    DELETE语句:
    DELETE from 表名称 where 列名称 = 值
    实例:
    删除某行:Delete from Person Where lastname = 'Wilson'
    删除整个表内容:Delete * from Person

    高级部分:
    Top:
    SQL Server:SELECT TOP number|percent 列名/column_name(s) FROM table_name
    MySQL:SELECT 列名 FROM table_name LIMIT number
    Oracle:SELECT 列名 FROM table_name WHERE ROWNUM <= number
    实例:
    选取头两行记录:SELECT TOP 2 * FROM Persons
    选取50%的记录:SELECT TOP 50 PERCENT * FROM Persons
    Like:
    select 列名 from 表名 where 列名 like 表达式('%a%')
    实例:
    SELECT * FROM Persons WHERE City LIKE '%lon%'
    NOT LIKE:SELECT * FROM Persons WHERE City NOT LIKE '%lon%'
    通配符:"%"替代一个或多个字符,"_"仅替代一个字符,"[abc]"字符中任意一个单一字符,"[^abc]或[!abc]"不在字符列中的任何单一字符
    实例:
    SELECT * FROM Persons WHERE FirstName LIKE '_eorge'
    SELECT * FROM Persons WHERE City LIKE '[ALN]%'
    SELECT * FROM Persons WHERE City LIKE '[!ALN]%'
    IN:IN 操作符允许我们在 WHERE 子句中规定多个值
    select 列名 from 表名 where 列名 in (value1,value2,...)
    实例:
    SELECT * FROM Persons WHERE LastName IN ('Adams','Carter')
    Between:选取介于两个值之间的数据范围
    select 列名 from 表名 where 列名 between value1 and value2
    实例:
    SELECT * FROM Persons WHERE LastName BETWEEN 'Adams' AND 'Carter'
    not between:SELECT * FROM Persons WHERE LastName NOT BETWEEN 'Adams' AND 'Carter'
    Alias别名:
    给表取别名:select 列名 from 表名 as 别名
    给列名取别名:select 列名 as 别名 from 表名
    实例:
    SELECT LastName AS Family, FirstName AS Name FROM Persons
    Join:用于根据两个或多个表中的列之间的关系,从这些表中查询数据
    两表查询and:SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
    FROM Persons, Orders
    WHERE Persons.Id_P = Orders.Id_P
    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
    inner join写法:select 列名 from 表1 inner join 表2 on 表1.列名 = 表2.列名
    left join写法: select 列名 from 表1 left join 表2 on 表1.列名 = 表2.列名
    right join写法: select 列名 from 表1 right join 表2 on 表1.列名 = 表2.列名
    UNION:操作符用于合并两个或多个 SELECT 语句的结果集
    select 列名 from 表1 UNION select 列名 from 表2
    UNION选取不同的值,UNION ALL选取所有值
    Create Datebase:
    Create Database database_name
    实例:
    CREATE DATABASE my_db
    CREATE TABLE:
    Create table 表名称
    (
    列名称1 数据类型 [约束类型],
    列名称2 数据类型 [约束类型],
    列名称3 数据类型 [约束类型],
    ...
    )
    实例:
    CREATE TABLE Persons
    (
    Id_P int,
    LastName varchar(255),
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255)
    )
    约束类型:
    NOT NULL:不接受NULL值
    UNIQUE:唯一约束
    为已有的表添加唯一约束: ALTER TABLE Persons ADD UNIQUE (Id_P)
    撤销UNIQUE约束:
    DROP CONSTRAINT uc_PersonID
    PRIMARY KEY:
    为已有的表添加PRIMARY KEY:ALTER TABLE Persons ADD PRIMARY KEY (ID_P)
    撤销PRIMARY KEY:ALTER TABLE Persons DROP CONSTRAINT pk_PersonID
    FOREIGN KEY约束:
    CREATE TABLE Orders
    (
    Id_O int NOT NULL PRIMARY KEY,
    OrderNo int NOT NULL,
    Id_P int FOREIGN KEY REFERENCES Persons(Id_P)
    )
    为已有的表添加FOREIGN KEY约束:
    ALTER TABLE Orders
    ADD FOREIGN KEY (Id_P)
    REFERENCES Persons(Id_P)
    撤销FOREIGN KEY:ALTER TABLE Orders DROP CONSTRAINT fk_PerOrders

    DROP:
    Drop index:Drop index table_name.index_name
    Drop table:Drop table table_name
    Drop database:Drop database database_name
    清楚表数据不删除结构:Truncate table 表名称
    Alter:
    添加列:Alter table table_name add 列名称 数据类型
    删除列: Alter table table_name drop column 列名称
    改变列数据类型:Alter table table_name Alter column 列名称 数据类型

    View:Create View:
    CREATE VIEW view_name AS
    SELECT column_name(s)
    FROM table_name
    WHERE condition
    实例:
    CREATE VIEW [Current Product List] AS
    SELECT ProductID,ProductName
    FROM Products
    WHERE Discontinued=No
    更新视图:
    CREATE VIEW [Current Product List] AS
    SELECT ProductID,ProductName,Category
    FROM Products
    WHERE Discontinued=No
    撤销视图:
    DROP VIEW view_name
    NULL值:判断方法,is null ,is not null
    实例:
    SELECT LastName,FirstName,Address FROM Persons
    WHERE Address IS NULL

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

    isnull():如果是Null值参加计算为0
    SELECT ProductName,UnitPrice*(UnitsInStock+ISNULL(UnitsOnOrder,0))
    FROM Products
    子查询:在一个查询中,条件是另一个查询,实例
    SELECT Customer FROM Orders
    WHERE OrderPrice>(SELECT AVG(OrderPrice) FROM Orders)

    找出没有选修过“李明”老师讲授课程的所有学生姓名
    --实现代码:
    Select SNAME FROM S Where NOT EXISTS( Select * FROM SC,C Where SC.CNO=C.CNO AND CNAME='李明' AND SC.SNO=S.SNO)
    Count:计算客户"Carter"的订单数
    SELECT COUNT(Customer) AS CustomerNilsen FROM Orders
    WHERE Customer='Carter'
    计算总的行数:
    SELECT COUNT(*) AS NumberOfOrders FROM Orders
    计算不同客户的数目:
    SELECT COUNT(DISTINCT Customer) AS NumberOfCustomers FROM Orders
    Now():返回当前日期和时间,SELECT ProductName, UnitPrice, Now() as PerDate FROM Products


    基础部分:
    SQL分为两个部分:数据操作语言(DML)和数据定义语言(DDL) 数据库管理系统和关系数据库管理系统
    查询和更新指令构成了 SQL 的 DML 部分:
    SELECT - 从数据库表中获取数据
    UPDATE - 更新数据库表中的数据
    DELETE - 从数据库表中删除数据
    INSERT INTO - 向数据库表中插入数据

    SQL 中最重要的 DDL 语句:
    CREATE DATABASE - 创建新数据库
    ALTER DATABASE - 修改数据库
    CREATE TABLE - 创建新表
    ALTER TABLE - 变更(改变)数据库表
    DROP TABLE - 删除表
    CREATE INDEX - 创建索引(搜索键)
    DROP INDEX - 删除索引

    SELECT语法:
    select 列名称 From 表名称/ select * from 表名称
    实例:SELECT LastName,FirstName FROM Persons
    去除重复值:SELECT DISTINCT 列名称 FROM 表名称
    实例:SELECT DISTINCT Company From Orders

    WHERE子句语法:
    SELECT 列名称 FROM 表名称 WHERE 列 运算符 值
    文本实例:SELECT * FROM Persons WHERE FirstName='Bush'
    数值实例:SELECT * FROM Persons WHERE Year>1965
    总结:文本的值用'',数值不加单引号

    And和Or运算符:
    SELECT * FROM Persons WHERE FirstName='Thomas' AND LastName='Carter'
    SELECT * FROM Persons WHERE firstname='Thomas' OR lastname='Carter'
    组合And和Or运算符:
    SELECT * FROM Persons WHERE (FirstName='Thomas' OR FirstName='William') AND LastName='Carter'

    order by语句(ASC为升序,DESC为降序):
    SELECT Company, OrderNumber FROM Orders ORDER BY Company
    以字母顺序显示公司名称(Company),并以数字顺序显示顺序号(OrderNumber):
    SELECT Company, OrderNumber FROM Orders ORDER BY Company, OrderNumber
    以逆字母顺序显示公司名称:
    SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC
    以逆字母顺序显示公司名称,并以数字顺序显示顺序号:
    SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC, OrderNumber ASC
    结果:
    Company OrderNumber
    W3School 2356
    W3School 6953
    IBM 3532
    Apple 4698

    insert into语句:
    insert into 表名 values (值1,值2,值3)
    指定数据插入的列:insert into table_name (列1,列2,列3) values (值1,值2,值3)
    实例:
    INSERT INTO Persons VALUES ('Gates', 'Bill', 'Xuanwumen 10', 'Beijing')
    INSERT INTO Persons (LastName, Address) VALUES ('Wilson', 'Champs-Elysees')
    update语句:
    update 表名 set 列名称 = 新值 where 列名称=某值
    实例:
    更新某一行中的一个列:UPDATE Person SET FirstName = 'Fred' WHERE LastName = 'Wilson'
    更新某一行中的若干列:UPDATE Person SET Address = 'Zhongshan 23', City = 'Nanjing' WHERE LastName = 'Wilson'
    DELETE语句:
    DELETE from 表名称 where 列名称 = 值
    实例:
    删除某行:Delete from Person Where lastname = 'Wilson'
    删除整个表内容:Delete * from Person

    高级部分:
    Top:
    SQL Server:SELECT TOP number|percent 列名/column_name(s) FROM table_name
    MySQL:SELECT 列名 FROM table_name LIMIT number
    Oracle:SELECT 列名 FROM table_name WHERE ROWNUM <= number
    实例:
    选取头两行记录:SELECT TOP 2 * FROM Persons
    选取50%的记录:SELECT TOP 50 PERCENT * FROM Persons
    Like:
    select 列名 from 表名 where 列名 like 表达式('%a%')
    实例:
    SELECT * FROM Persons WHERE City LIKE '%lon%'
    NOT LIKE:SELECT * FROM Persons WHERE City NOT LIKE '%lon%'
    通配符:"%"替代一个或多个字符,"_"仅替代一个字符,"[abc]"字符中任意一个单一字符,"[^abc]或[!abc]"不在字符列中的任何单一字符
    实例:
    SELECT * FROM Persons WHERE FirstName LIKE '_eorge'
    SELECT * FROM Persons WHERE City LIKE '[ALN]%'
    SELECT * FROM Persons WHERE City LIKE '[!ALN]%'
    IN:IN 操作符允许我们在 WHERE 子句中规定多个值
    select 列名 from 表名 where 列名 in (value1,value2,...)
    实例:
    SELECT * FROM Persons WHERE LastName IN ('Adams','Carter')
    Between:选取介于两个值之间的数据范围
    select 列名 from 表名 where 列名 between value1 and value2
    实例:
    SELECT * FROM Persons WHERE LastName BETWEEN 'Adams' AND 'Carter'
    not between:SELECT * FROM Persons WHERE LastName NOT BETWEEN 'Adams' AND 'Carter'
    Alias别名:
    给表取别名:select 列名 from 表名 as 别名
    给列名取别名:select 列名 as 别名 from 表名
    实例:
    SELECT LastName AS Family, FirstName AS Name FROM Persons
    Join:用于根据两个或多个表中的列之间的关系,从这些表中查询数据
    两表查询and:SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
    FROM Persons, Orders
    WHERE Persons.Id_P = Orders.Id_P
    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
    inner join写法:select 列名 from 表1 inner join 表2 on 表1.列名 = 表2.列名
    left join写法: select 列名 from 表1 left join 表2 on 表1.列名 = 表2.列名
    right join写法: select 列名 from 表1 right join 表2 on 表1.列名 = 表2.列名
    UNION:操作符用于合并两个或多个 SELECT 语句的结果集
    select 列名 from 表1 UNION select 列名 from 表2
    UNION选取不同的值,UNION ALL选取所有值
    Create Datebase:
    Create Database database_name
    实例:
    CREATE DATABASE my_db
    CREATE TABLE:
    Create table 表名称
    (
    列名称1 数据类型 [约束类型],
    列名称2 数据类型 [约束类型],
    列名称3 数据类型 [约束类型],
    ...
    )
    实例:
    CREATE TABLE Persons
    (
    Id_P int,
    LastName varchar(255),
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255)
    )
    约束类型:
    NOT NULL:不接受NULL值
    UNIQUE:唯一约束
    为已有的表添加唯一约束: ALTER TABLE Persons ADD UNIQUE (Id_P)
    撤销UNIQUE约束:
    DROP CONSTRAINT uc_PersonID
    PRIMARY KEY:
    为已有的表添加PRIMARY KEY:ALTER TABLE Persons ADD PRIMARY KEY (ID_P)
    撤销PRIMARY KEY:ALTER TABLE Persons DROP CONSTRAINT pk_PersonID
    FOREIGN KEY约束:
    CREATE TABLE Orders
    (
    Id_O int NOT NULL PRIMARY KEY,
    OrderNo int NOT NULL,
    Id_P int FOREIGN KEY REFERENCES Persons(Id_P)
    )
    为已有的表添加FOREIGN KEY约束:
    ALTER TABLE Orders
    ADD FOREIGN KEY (Id_P)
    REFERENCES Persons(Id_P)
    撤销FOREIGN KEY:ALTER TABLE Orders DROP CONSTRAINT fk_PerOrders

    DROP:
    Drop index:Drop index table_name.index_name
    Drop table:Drop table table_name
    Drop database:Drop database database_name
    清楚表数据不删除结构:Truncate table 表名称
    Alter:
    添加列:Alter table table_name add 列名称 数据类型
    删除列: Alter table table_name drop column 列名称
    改变列数据类型:Alter table table_name Alter column 列名称 数据类型

    View:Create View:
    CREATE VIEW view_name AS
    SELECT column_name(s)
    FROM table_name
    WHERE condition
    实例:
    CREATE VIEW [Current Product List] AS
    SELECT ProductID,ProductName
    FROM Products
    WHERE Discontinued=No
    更新视图:
    CREATE VIEW [Current Product List] AS
    SELECT ProductID,ProductName,Category
    FROM Products
    WHERE Discontinued=No
    撤销视图:
    DROP VIEW view_name
    NULL值:判断方法,is null ,is not null
    实例:
    SELECT LastName,FirstName,Address FROM Persons
    WHERE Address IS NULL

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

    isnull():如果是Null值参加计算为0
    SELECT ProductName,UnitPrice*(UnitsInStock+ISNULL(UnitsOnOrder,0))
    FROM Products
    子查询:在一个查询中,条件是另一个查询,实例
    SELECT Customer FROM Orders
    WHERE OrderPrice>(SELECT AVG(OrderPrice) FROM Orders)

    找出没有选修过“李明”老师讲授课程的所有学生姓名
    --实现代码:
    Select SNAME FROM S Where NOT EXISTS( Select * FROM SC,C Where SC.CNO=C.CNO AND CNAME='李明' AND SC.SNO=S.SNO)
    Count:计算客户"Carter"的订单数
    SELECT COUNT(Customer) AS CustomerNilsen FROM Orders
    WHERE Customer='Carter'
    计算总的行数:
    SELECT COUNT(*) AS NumberOfOrders FROM Orders
    计算不同客户的数目:
    SELECT COUNT(DISTINCT Customer) AS NumberOfCustomers FROM Orders
    Now():返回当前日期和时间,SELECT ProductName, UnitPrice, Now() as PerDate FROM Products
    Group by: SELECT Customer,SUM(OrderPrice) FROM Orders GROUP BY Customer

    存储过程:

    create procedure usp_GetInfo as select rdName, canLendQty, canLendDay, rdBorrowQty from Reader, ReaderType
    where Reader.rdType = ReaderType.rdType
    调用的时候:
    exec usp_GetInfo

    带输入参数的存储过程:

    创建一个存储过程,实现还书功能;

    复制代码
     1 create procedure usp_ReturnBook
     2 
     3        @rdID char(9),
     4 
     5        @bkID char(9)
     6 
     7 as
     8 
     9        --还书(1.修改书的状态,2.修改读者的借书数量,3.在Borrow表中删除这条借书纪录)
    10 
    11        update Book set bkState = 1
    12 
    13        where bkID = @bkID
    14 
    15  
    16 
    17        update Reader set rdBorrowQty = rdBorrowQty - 1
    18 
    19        where rdType = (select rdType from Reader where rdID = @rdID)
    20 
    21  
    22 
    23        delete from Borrow
    24 
    25        where rdID = @rdID and bkID = @bkID
    26 
    27 --调用
    28 
    29 exec usp_ReturnBook 'rd2017001','bk2017002'
    复制代码

    带输入参数和输出参数的存储过程:

    创建一个存储过程,输入读者的编号,输出该读者的姓名;

    复制代码
     1 create procedure usp_GetName
     2 
     3     @rdID char(9),
     4 
     5     @rdName varchar(20) output
     6 
     7 as
     8 
     9     select @rdName = rdName from Reader
    10 
    11     where rdID = @rdID
    12 
    13 go
    14 
    15 --调用
    16 
    17 declare @rdName varchar(20)
    18 
    19 exec usp_GetName 'rd2017001',@rdName output
    20 
    21 select @rdName 姓名
    复制代码

    创建 DDL 触发器:

    禁止用户修改 BooksDB 数据库中的表;、

    复制代码
    create trigger tri_OnBookDB on database
    
    for ddl_table_events
    
    as
    
        print '无法在数据库BookDB中创建,删除,修改表!!'
    
        rollback
    
    --测试:
    
    create table Test (a int,b char(6))
    
    drop table Borrow
     https://www.cnblogs.com/selene/p/4493311.html
    http://www.cnblogs.com/selene/p/4490503.html
  • 相关阅读:
    Ubuntu16.04安装openldap和phpldapadmin
    Java 8 中的抽象类和接口到底有啥区别?
    Redis 开发陷阱及避坑指南!
    Java 中的 6 颗语法糖
    Java 8 有多牛逼?打破一切你对接口的认知!
    Git操作常用的命令都在这里了。
    Github 太狠了,居然把 "master" 干掉了!
    微服务业务日志收集方案,写得非常好!
    Maven基本介绍与安装
    IntelliJ IDEA 调试 Java 8 Stream,实在太香了!
  • 原文地址:https://www.cnblogs.com/parr2017/p/7944443.html
Copyright © 2020-2023  润新知