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. Spring框架技术

    Spring框架技术 SSM(Spring+SpringMVC+Mybatis)阶段的学习,也算是成功出了Java新手村. 前面我们已经学习过Mybatis了. 从这里开始,很多的概念理解起来就稍微有 ...

  2. Ubu18.0-NVIDIA显卡驱动重装

    //图片仅供参考,请勿代入 问题情况:电脑装了双系统,WIN10+Ubu,Ubu分辨率不稳定,经常发生变化 显卡型号:打开设备管理器进行查看 解决方法:重装NVIDIA显卡驱动 1.去英伟达官网下载自 ...

  3. 【FAQ】HMS Core推送服务与本地创建通知消息如何相互覆盖?

    我们知道,单独使用HMS Core推送服务或本地创建通知消息,都可以实现通知消息的覆盖,方式分别为: 1.本地创建通知消息(简称本地通知消息) 通过notificationManager.notify ...

  4. 面渣逆袭:Spring三十五问,四万字+五十图详解

    大家好,我是老三啊,面渣逆袭 继续,这节我们来搞定另一个面试必问知识点--Spring. 有人说,"Java程序员都是Spring程序员",老三不太赞成这个观点,但是这也可以看出S ...

  5. 封装axios在项目中使用

    import store from '@/store/index' import { Loading,Message,MessageBox } from 'element-ui' import rou ...

  6. [AcWing 87] 把字符串转换成整数

    点击查看代码 class Solution { public: int strToInt(string str) { int k = 0; while (k < str.size() & ...

  7. Unreal 输入系统 解析

    前言 输入系统,输入某个键,响应到GamePlay层做对应的事.例如 点击鼠标,前进还是开枪之类,是如何响应的.这里只说应用层逻辑,硬件层逻辑不讲述. 详解 1.问题来源 先看下面一个例子:跳跃的事件 ...

  8. 面试官:我把数据库部署在Docker容器内,你觉得如何?

    开源Linux 一个执着于技术的公众号 上一篇:CentOS 7上搭建Zabbix4.0 近2年Docker非常的火热,各位开发者恨不得把所有的应用.软件都部署在Docker容器中,但是您确定也要把数 ...

  9. 10 分钟看懂 Docker 和 K8S!

    2010年,几个搞IT的年轻人,在美国旧金山成立了一家名叫"dotCloud"的公司. 这家公司主要提供基于PaaS的云计算技术服务.具体来说,是和LXC有关的容器技术. LXC, ...

  10. mysql5.6 innodb_large_prefix引起的一个异常

    phenomenon: Specified key was too long; max key length is 3072 bytes 在修改一个数据库字段时,字段容量被限制为了表前缀的大小而不是本 ...