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
)

《SQL Server基础——SQL语句》的更多相关文章

  1. 简单物联网:外网访问内网路由器下树莓派Flask服务器

    最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...

  2. 利用ssh反向代理以及autossh实现从外网连接内网服务器

    前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...

  3. 外网访问内网Docker容器

    外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...

  4. 外网访问内网SpringBoot

    外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...

  5. 外网访问内网Elasticsearch WEB

    外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...

  6. 怎样从外网访问内网Rails

    外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...

  7. 怎样从外网访问内网Memcached数据库

    外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...

  8. 怎样从外网访问内网CouchDB数据库

    外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...

  9. 怎样从外网访问内网DB2数据库

    外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...

  10. 怎样从外网访问内网OpenLDAP数据库

    外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...

随机推荐

  1. 测试开发【Mock平台】04实战:前后端项目初始化与登录鉴权实现

    [Mock平台]为系列测试开发教程,从0到1编码带你一步步使用Spring Boot 和 Antd React 框架完成搭建一个测试工具平台,希望作为一个实战项目能为你的测试开发学习有帮助. 一.后端 ...

  2. 时间篇之centos7修复ntpq: read: Connection refused

    关于ntp同步时间, 由于是解决问题,所以理论性内容不多. 关于UTC NTP要提供准确的时间,就必须有准确的时间来源,那可以用格林尼治时间吗?答案是否定的. 因为格林尼治时间是以地球自转为基础的时间 ...

  3. Servlet 3.1学习笔记

    Servlet 3.1学习笔记 参考文档 Servlet 3.1标准 什么是 Servlet ? Servlet 是基于 Java 平台的 Web 组件,由一个容器管理,能够生成动态内容. 什么是 S ...

  4. drf中的请求与响应

    请求与响应(3星) 请求:Request REST framework 传入视图的request对象不再是Django默认的HttpRequest对象,而是REST framework提供的扩展了Ht ...

  5. java实现sftp文件上传下载

    /** * * @param filePath 文件全路径 * @param ftpPath 上传到目的端目录 * @param username * @param password * @param ...

  6. 中文版Postman

    作为软件开发从业者,API 调试是必不可少的一项技能,在这方面 Postman 做的非常出色.但是在整个软件开发过程中,API 调试只是其中的一部分,还有很多事情 Postman 无法完成,或者无法高 ...

  7. 记录:替换线上springboot项目可执行jar包中依赖jar里的class文件

    问题背景: 项目组发现线上版本问题后,定位是由于项目依赖的某个jar包中有个小BUG. 解决方案: 在修改了对应的java文件后,编译出对应的class文件.从生产环境下载项目jar包,解压后,找到对 ...

  8. 以ARM和RISC-V为内核的单片机写寄存器

    我以为这是个很简单的问题,没想到还有一些初学者不会.可能他们也是跟我一样是直接学的如何操作单片机并没有学微机原理么. ARM和RISC-V的机器的系统架构都是哈佛结构的,意思是程序存储器.数据存储器和 ...

  9. 2021.10.29 P1649 [USACO07OCT]Obstacle Course S(BFS)

    2021.10.29 P1649 [USACO07OCT]Obstacle Course S(BFS) 题意: 给一张n*n的图,起点为A,终点为 B,求从A到B转弯次数最少为多少. 分析: 是否存在 ...

  10. 手撸一个虚拟DOM,不错

    大家好,我是半夏,一个刚刚开始写文的沙雕程序员.如果喜欢我的文章,可以关注 点赞 加我微信:frontendpicker,一起学习交流前端,成为更优秀的工程师-关注公众号:搞前端的半夏,了解更多前端知 ...