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. 【深度学习 论文篇 01-1 】AlexNet论文翻译

    前言:本文是我对照原论文逐字逐句翻译而来,英文水平有限,不影响阅读即可.翻译论文的确能很大程度加深我们对文章的理解,但太过耗时,不建议采用.我翻译的另一个目的就是想重拾英文,所以就硬着头皮啃了.本文只 ...

  2. C++---使用类

    运算符重载 概念 运算符重载就是想法转换, 目的是简化函数调用的方式 重载就是赋予新的含义, 运算符重载也是, 即同一个运算符可以有不同的功能 C++本身已经对一些运算符进行了重载, 同时C++允许程 ...

  3. Cookie&&Session&&jsp入门

    会话技术 会话:一次会话中包含多次请求和响应. 一次会话:浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开为止 功能:在一次会话的范围内的多次请求间,共享数据 方式: 客户端会话技术:Coo ...

  4. 学习day43

    开始学习html知识

  5. el-carousel手动切换图片

    添加ref 和 点击哪个地方切换的方法 <div class="center">       <div class="pw between"& ...

  6. JVM内存管理面试常见问题全解

    目录 一.什么是JVM 1.jvm的三个组成部分 二.类加载系统 1.类的加载过程 2.类加载器 三.双亲委派机制 1.双亲委派机制介绍 2.为什么要双亲委派机制 3.双亲委派机制的核心源码 4.全盘 ...

  7. Promise的then和catch如何影响状态的变化

    记住两句话: 1.then正常返回resolved,里面有报错返回reject 1 const p1 = Promise.resolve().then(()=>{ 2 console.log(1 ...

  8. QGIS 3.14插件开发——Win10系统PyCharm开发环境搭建四步走

    前言:最近实习要求做一个QGIS插件,网上关于QGIS 3.14插件开发环境搭建的文档不多,而且也不算太全面.正好实习的时候写了一个文档,在这里给大家分享一下. 因为是Word转的Markdown,可 ...

  9. linux系统如何查看内核版本、操作系统版本等信息

    有时候需要查看linux系统的内核版本,可以有多种方法,方法如下:(下面以优麒麟系统为例) 方法1: 打开mate终端,在命令行输入以下命令: uname -a 运行效果如下: ​​​ 如果只查看内核 ...

  10. 【Istio实际操作篇】Istio入门,10分钟快速安装

    @ 目录 前言 本文说明 请大家务必查看 环境准备 详细版 入门:搭建步骤 Istio软件包下载 下载Istio 卸载 简洁版 安装 卸载 学习不走弯路,gz号「yeTechLog」 前言 上一篇讲了 ...