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. 基于Apache Hudi和Debezium构建CDC入湖管道

    从 Hudi v0.10.0 开始,我们很高兴地宣布推出适用于 Deltastreamer 的 Debezium 源,它提供从 Postgres 和 MySQL 数据库到数据湖的变更捕获数据 (CDC ...

  2. python---输出函数运行时间的装饰器

    """ 装饰器: 不改变原函数的调用方式和函数的前提下, 增加额外的功能, 其本质就是一个闭包 ---输出函数的运行时间 """ impor ...

  3. Spring的事务控制-基于xml方式

    介绍:该程序模拟了转账操作,即Jone减少500元,tom增加500元 1.导入坐标 <dependency> <groupId>junit</groupId> & ...

  4. 网卡激活-up(dhcp方式获得ip)

    一次修复记录 采样: [root@fp-web-124 network-scripts]# cat /etc/redhat-release CentOS Linux release 7.2.1511 ...

  5. swagger不再是第一选择了

    ​ 一.前言 工欲善其事,必先利其器 最近对 API 接口协作的软件研究了好久,市面上的软件都下载用了一轮,下面给大家介绍其中的最强「神器」 Apifox. Apifox 官网:apifox.cn 在 ...

  6. VirtualBox安装Kali

    VirtualBox安装Kali 下载VBox 去Virtual Box官网下载(根据操作系统选择版本,此处以Windows为例) 打开安装程序进行安装即可 安装Kali 去Kali Linux官网下 ...

  7. Java 在Word指定段落/文本位置插入分页符

    在Word插入分页符可以在指定段落后插入,也可以在特定文本位置处插入.本文,将以Java代码来操作以上两种文档分页需求.下面是详细方法及步骤. [程序环境] 在程序中导入jar,如下两种方法: 方法1 ...

  8. 2021.11.05 eleveni的水省选题的记录

    2021.11.05 eleveni的水省选题的记录 因为eleveni比较菜,但是eleveni不想写绿题(总不能说是被绿题虐得不想写),eleveni决定继续水noip原题. --实际上菜菜的el ...

  9. 分享两个实用的shell脚本

    各位,早上好啊~ 发现许久没有分享过技术文章了,今天分享两个部署项目时候比较实用的shell脚本 一键部署shell脚本 由于个人部署,会习惯把jar放到lib目录下面,如果你没有这个习惯,可以适当做 ...

  10. 攻防世界-MISC:掀桌子

    这是攻防世界新手练习区的第八题,题目如下: 就给了一串16进制的字符串.哎,又是不懂,看了一下官方WP,说是将每两位16进制数转换为10进制,再减去128再转换为ASCII码.直接上脚本 str1 = ...