• 《SQL Server基础——SQL语句》


    SQL Server基础——SQL语句

    一、创建和删除数据库;


    1.创建数据库(默认化初始值)

    格式:

    CREATE DATABASE 数据库名称
    

    例如:

    CREATE DATABASE SCC
    

    2.创建数据库(自定义初始值)

    格式:

    CREATE DATABASE 数据库名
    ON PRIMARY
    (
    	NAME='逻辑名称',
    	FILENAME='文件存储路径'
    )
    LOG ON
    (
    	NAME='逻辑名称',
    	FILENAME='文件存储路径'
    )
    

    例如:

    CREATE DATABASE SCC
    ON PRIMARY
    (
    	NAME='SCC_Data',
    	FILENAME='D:\SQL\SCC\SCC_Data.mdf',
    	SIZE=4MB
    )
    LOG ON
    (
    	NAME='SCC_Log',
    	FILENAME='D:\SQL\SCC\SCC_Log.ldf',
    	SIZE=2MB
    )
    

    3.删除数据库

    格式:

    DROP DATABASE 数据库名
    

    例如:

    DROP DATABASE SCC
    

    二、创建数据表;


    格式:

    USE 数据库名
    GO
    CREATE TABLE 表名
    (
    	列名  数据类型(长度)  列级约束
    )
    

    例如:

    USE SCC
    GO
    CREATE TABLE 学生表
    (
    	Sno  CHAR(5)  NOT NULL  UNIQUE,
    	Sname  CHAR(8)  NOT NULL,
    	Sage  SMALLINT  DEFAULT 20,						--默认值为20
    	Sex  CHAR(2)  CHECK(Sex='男' or Sex='女')
    )
    

    三、约束语句;


    1.主键约束(PRIMARY KEY)

    格式一:

    列名  数据类型(长度)  PRIMARY KEY
    

    例如:

    USE SCC
    GO
    CREATE TABLE 课程表
    (
    	Cno  CHAR(5)  PRIMARY KEY
    )
    

    格式二:

    CONSTRAINT 约束名 PRIMARY KEY(列名)				--CONSTRAINTS语句
    

    例如:

    USE SCC
    GO
    CREATE TABLE 课程表
    (
    	Sno  CHAR(5),
    	Sname  CHAR(8),
        CONSTRAINT C1 PRIMARY KEY(Sno)			--CONSTRAINT C1 PRIMARY KEY(Sno,Sname)————双主键
    )
    

    2.外键约束(FOREIGN KEY )

    格式:

    CONSTRAINT 约束名 FOREIGN KEY(列名) REFERENCES 被引用表的名称(列名)
    

    例如:

    USE SCC
    GO
    CREATE TABLE 课程表
    (
    	Cno  CHAR(5),
        CONSTRAINT C1 PRIMARY KEY(Cno)
    )
    GO
    CREATE TABLE 选课表
    (
    	Cno  CHAR(5),
        Sno  CHAR(5),
    	CONSTRAINT C2 PRIMARY KEY(Sno),
    	CONSTRAINT C3 FOREIGN KEY(Cno) REFERENCES 课程表(Cno)  
    )
    

    3.非空约束(NOT NULL)

    格式:

    列名  数据类型(长度)  NOT NULL
    

    例如:

    USE SCC
    GO
    CREATE TABLE 课程表
    (
    	Cno  CHAR(5)  NOT NULL
    )
    

    4.唯一约束(UNIQUE)

    格式:

    列名  数据类型(长度)  UNIQUE
    

    例如:

    USE SCC
    GO
    CREATE TABLE 课程表
    (
    	Cno  CHAR(5)  UNIQUE
    )
    

    四、修改语句;


    1.添加数据

    格式:

    INSERT INTO 表名(列名1, 列名2) VALUES(数据1, 数据2);
    

    例如:

    INSERT INTO 学生表(Sid, Sname) VALUES(3, '陈宇辉');
    

    2.更改数据

    格式:

    UPDATE 表名 
    SET 列名1=新值1, 列名2=新值2 
    WHERE 过滤条件
    

    例如:

    UPDATE 学生表 
    SET Score='99', Sage='25' 
    WHERE Sname='陈宇辉'
    

    2.删除数据(一行)

    格式:

    DELETE 
    FROM 表名 
    WHERE 列名='值'
    AND 列名 not in ('值1', '值2')
    

    例如:

    DELETE 
    FROM 学生表 
    WHERE Sno = '8001'
    AND SAGE not in ('20', '21')
    

    3.删除约束

    格式:

    ALTER TABLE 表名 DROP CONSTRAINT 约束名
    

    例如:

    ALTER TABLE 选课表 DROP CONSTRAINT C2
    

    五、终局之战;


    1. 断开数据库连接

    格式:

    ALTER DATABASE 数据库名
    SET OFFLINE WITH ROLLBACK IMMEDIATE
    

    例如:

    ALTER DATABASE SCC
    SET OFFLINE WITH ROLLBACK IMMEDIATE
    

    2. 分离数据库

    格式:

    EXEC sp_detach_db @dbname=N'数据库名'
    

    例如:

    EXEC sp_detach_db @dbname=N'SCC'
    

    3.附加数据库

    格式:

    EXEC sp_attach_db @dbname=N'数据库名',
    @filename1=N'.mdf文件的存储路径',@filename2=N'.ldf文件的存储路径'
    

    例如

    EXEC sp_attach_db @dbname=N'SCC',
    @filename1=N'D:\SQL\SCC\SCC_Data.mdf', @filename2=N'D:\SQL\SCC\SCC_Log.ldf'
    

    六、查询语句;


    1.查询某列

    格式:

    SELECT 列名
    	FROM 表名
    	WHERE 查询条件
    

    例如:

    USE SCC
    GO
    SELECT SNO, SNAME
    	FROM STUDENT
    	WHERE SDEP='数学系'
    

    2.自定义查询结果

    格式:

    SELECT 列名 as 重命名
    	FROM 表名
    	WHERE 查询条件
    
    SELECT 列名*0.8								--将查询数据乘以0.8后输出
    	FROM 表名
    	WHERE 查询条件
    

    例如:

    USE SCC
    GO
    SELECT SN, SGRADE, SGRADE*0.8 as 成绩
    	FROM SC
    	WHERE CN='C1'
    

    3.正倒序排列

    格式:

    ORDER BY 列名 DESC							--降序排列
    
    ORDER BY 列名 ASC								--升序排列
    
    ORDER BY 列名1 DESC, 列名2 ASC 				   --先按“列名1”降序排列,若“列名1”相同,则按“列名2”升序排列
    
    ORDER BY 2 DESCA							  --按第二列降序排列
    

    例如:

    USE SCC
    GO
    SELECT SN, SGRADE
    	FROM SC
    	WHERE CN='C1'
    	ORDER BY SGRADE DESC, SN ASC
    

    3.去除重复项

    格式:

    SELECT 列名
    	FROM 表名
    	WHERE 查询条件
    

    例如:

    USE SCC
    GO
    SELECT distinct SNO, SNAME
    	FROM STUDENT
    	WHERE SDEP='数学系'
    

    4.创建一个由查询结果组成的新数据表

    格式:

    SELECT 列名
    	INTO 新表名
    	FROM 表名
    	WHERE 查询条件
    

    例如:

    SELECT *
    	INTO TU_STUDENT
    	FROM STUDENT
    	WHERE SDEP='计算机系'
    

    4.插入

    格式:

    SELECT 列名
    	FROM 表名
    	WHERE 查询条件
    

    例如:

    USE SCC
    GO
    SELECT SNO, SNAME
    	FROM STUDENT
    	WHERE SDEP='数学系'
    

    INSERT into SC_C
    select COURSE.CNO, COURSE.CNAME,avg(SC.SGRADE)
    from SC, COURSE
    where SC.CN=COURSE.CNO
    group by COURSE.CNO, COURSE.CNAME

    七、分类汇总

    1.求总人数

    格式:

    SELECT count(*)
    	FROM 表名
    

    例如:

    USE SCC
    GO
    SELECT count(*)
    	FROM STUDENT
    

    2.求最高值和最小值

    代码:

    SELECT max(列名), min(列名)
    	FROM 表名
    	WHERE 查询条件
    

    例如:

    USE SCC
    GO
    SELECT COURSE.CNAME, MAX(SC.SGRADE), MIN(SC.SGRADE)
    	FROM SC, COURSE
    	WHERE SC.CN=COURSE.CNO
    	GROUP BY COURSE.CNAME									--以COURSE.CNAME为依据分组
    

    3.求平均值

    代码:

    SELECT AVG(列名)
    	FROM 表名
    	WHERE 查询条件
    

    例如:

    USE SCC
    GO
    SELECT STUDENT.SNAME, AVG(SC.SGRADE)
    	FROM STUDENT, SC
    	WHERE STUDENT.SNO=SC.SN
    	GROUP BY STUDENT.SNAME
    

    八、连接查询

    1.两种连接方式

    格式一:

    SELECT 列名
    	FROM 表名1, 表名2
    	WHERE 表名1.列名=表名2.列名
    

    例如:

    USE SCC
    GO
    SELECT *
    	FROM STUDENT, SC
    	WHERE STUDENT.SNO=SC.SN
    

    格式二:

    SELECT 列名
    	FROM 表名1 JOIN 表名2 ON 表名1.列名=表名2.列名
    

    例如:

    USE SCC
    GO
    SELECT *
    	FROM STUDENT JOIN SC ON STUDENT.SNO=SC.SN
    

    九、特殊查询

    1.姓张的同学

    代码:

    USE SCC
    GO
    SELECT *
    	FROM STUDENT
    	WHERE SNAME LIKE '张%'
    

    2.数学系或计算机系的同学

    代码:

    USE SCC
    GO
    SELECT *
    	FROM STUDENT
    	WHERE (SDEP='数学系' or SDEP='计算机系')
    

    3.缺少了成绩的同学

    代码:

    USE SCC
    GO
    SELECT *
    	FROM SC
    	WHERE SGRADE is NULL
    

    4.选修课超过三门的学生学号

    代码:

    USE SCC
    GO
    SELECT
    	FROM SC
    	GROUP BY SN having count(*)>3
    

    5.求各系的男女生人数

    代码:

    USE SCC
    GO
    SELECT SDEP, SSEX, COUNT(*)
    	FROM STUDENT
    	GROUP BY SDEP, SSEX
    	ORDER BY SDEP
    

    6.查询每一门课的间接先行课

    代码:

    USE SCC
    GO
    SELECT X.CNO, Y.PRECNO
    	FROM COURSE X, COURSE Y
    	WHERE X.PRECNO=Y.CNO
    

    7.求 C1 课程的成绩高于张三的学生

    代码:

    USE SCC
    GO
    SELECT *
    	FROM SC, STUDENT
    	WHERE SC.CN='C1'
    	AND STUDENT.SNO=SC.SN
    	AND SC.SGRADE>
    	(
    		SELECT SC.SGRADE
    		FROM SC, STUDENT
    		WHERE SC.CN='C1'
    		AND STUDENT.SNAME='张三'
    		AND STUDENT.SNO=SC.SN
    	)
    

    8.查询选修了全部课程的学生

    代码:

    25】查询选修了全部课程的学生
    USE SCC
    GO
    SELECT SNAME
    FROM STUDENT
    WHERE NOT EXISTS
    (
    	SELECT *
    	FROM COURSE
    	WHERE NOT EXISTS
    	(
    		SELECT *
    		FROM SC
    		WHERE SC.SN=STUDENT.SNO
    		AND SC.CN=COURSE.CNO
    	)
    )
    

    9.求至少选修了学号为“S2”的学生所选修的全部课程的学生学号和姓名

    代码:

    USE SCC
    GO
    SELECT SNAME, SNO
    FROM STUDENT
    WHERE SNO NOT IN('S2')
    AND SNO IN
    (
    	SELECT SN
    	FROM SC X
    	WHERE NOT EXISTS
    	(
    		SELECT *
    		FROM SC Y
    		WHERE Y.SN='S2'
    		AND NOT EXISTS
    		(
    			SELECT *
    			FROM SC Z
    			WHERE Y.CN=Z.CN
    			AND X. SN=Z.SN
    		)
    	)
    )
    

    10.类别中最高的图书定价不低于全部按类别分组的图书平均定价的 2 倍

    USE Book
    GO
    SELECT BType
    FROM BookInfo
    GROUP BY BType
    having max(BPrice)>=ALL
    (
    	SELECT AVG(BPrice)*2
    	FROM BookInfo
    	GROUP BY BType
    )
    
  • 相关阅读:
    【Benewake(北醒) 】中距 TF02-Pro-W TTL/485介绍以及资料整理
    独热编码和自然数编码
    EFCore之执行原生SQL语句
    Python:【基础语法】 deque()用法
    Seaborn数据可视化综合应用Basemap和Seaborn在线闯关_头歌实践教学平台
    Linux初识+环境部署
    高性能零售IT系统的建设06-当应对大量HTTP请求时兼顾性能、处理速度的架构设计
    【Lipschitz】基于matlab的Lipschitz李氏指数仿真
    windows系统重装时,如何将对工作的影响降到最低,实现平滑过渡?
    洛谷 T284656 改试卷(paper)
  • 原文地址:https://www.cnblogs.com/Dustspirt/p/16375886.html