数据库SQL命令大全 sql查询语句大全及实例

时间:2022-05-31 16:04:38 来源: 三秦科技网


一、关于数据库的SQL命令

1.创建数据库

CREATE DATABASE 数据库名称

[ON

[FILEGROUP 文件组名称]

(

NAME=数据文件逻辑名称,

FILENAME='路径+数据文件名',

SIZE=数据文件初始大小,

MAXSIZE=数据文件最大容量,

FILEGROWTH=数据文件自动增长容量,

)]

[LOG ON

(

NAME=日志文件逻辑名称,

FILENAME='路径+日志文件名',

SIZE=日志文件初始大小,

MAXSIZE=日志文件最大容量,

FILEGROWTH=日志文件自动增长容量,

)]

[COLLATE 数据库校验方式名称]

[FOR ATTACH]

注释:

1.用[ ]括起来的语句,可以选用或者不选用.

2.如果只用 “CREATE DATABASE 数据库名称”,DBMS会默认逻辑名称、文件组大小等属.

2.修改数据库

ALTER DATABASE 数据库名称

//1.向数据库中添加数据文件

ADD FILE(

具体文件格式)

[TO FILEGROUP 文件组名]

//2.向数据库中添加数据文件

|ADD LOG FILE(

具体文件格式)

//3.向数据库删除逻辑文件,并删除物理文件

|REMOVE FILE 文件逻辑名称

//4.指定要修改的文件

|MODIFY FILE(

具体文件格式)

//5.向数据库中添加文件组

|ADD FILEGROUP 文件组名

//6.从数据库中删除文件组

|REMOVE FILEGROUP 文件组名

//7.修改文件组名称,或设置文件组的只读、读写,指定文件组为默认文件组

|MODIFY FILEGROUP 文件组名

{

READ_ONLY|READ_WRITE,

| DEFAULT,

| NAME = 新文件组名 }

其中,“具体文件格式”为:

(

NAME = 文件逻辑名称

[,NEWNAME = 新文件逻辑名称]

[,SIZE = 初始文件大小]

[,MAXSIZE = 文件最大容量]

[,FILEGROWTH = 文件自动增长容量]

)

其中“|”表示单选

3.删除数据库

DROP DATABASE 数据库名称

1

4.查询数据库

4.1用系统存储过程显示数据库结构

Sp_helpdb [[@dbname=] 'name']

1

4.2用系统存储过程显示文件信息

Sp_helpfile [[@filename =] 'name']

1

4.3用系统存储显示文件组信息

Sp_helpfilegroup [[@filegroupname =] 'name']

1

二、数据类型介绍

1.数值

2.字符串

3.时间日期

4.数据库的字段属

4.1

UnSigned

无符号的

声明了该列不能为负数

4.2

ZEROFILL

0填充的

不足位数的用0来填充 , 如int(3),5则为005

4.3

Auto_InCrement

通常理解为自增,自动在上一条记录的基础上默认+1

通常用来设计唯一的主键,必须是整数类型

可定义起始值和步长

当前表设置步长(AUTO_INCREMENT=100) : 只影响当前表

SET @@auto_increment_increment=5 ; 影响所有使用自增的表(全局)

4.4

NULL 和 NOT NULL

默认为NULL , 即没有插入该列的数值

如果设置为NOT NULL , 则该列必须有值

4.5

DEFAULT

默认的,用于设置默认值

4.6

拓展

三、关于数据表的SQL命令

1.创建数据表

CREATE TABLE 表名

( 列名 数据类型 表约束,

)

例子:

CREATE TABLE S

( SNO VARCHAR(6),

SN NVARCHAR(10),

SEX NCHAR(1) DEFAULT '男', )

2.数据表的约束

2.1 NULL/NOT NULL约束

NULL值不是0,也不是空白,指“不知道’、”不确定“的意思,

NOT NULL指不允许出现空值。

2.2 UNIQUE约束(唯一约束)

用于指明基本表在某一列或多个列的组合上取值必须唯一

建立UNIQUE约束时,需要考虑以下几个因素。

1.使用 UNIQUE约束的字段允许为NULL值,但系统为保证其唯一,最多只可以出现一个NULL值。

2.一个表中可以允许有多个 UNIQUE约束

3.UNIQUE约束用于强制在指定字段上创建一个 UNIQUE索引,缺省为非聚集索引,UNIQUE既可用于列约束,也可用于表约束。

2.3 PRIMARY KEY 约束(主键约束)

语法格式:

CONSTRAINT S_Prim PRIMARY KEY (列约束)

PRIMARY KEY (表约束)

PRIMARY KEY 约束用于定义基本表的主键,起唯一标识作用,其值不能为空.

PRIMARY KEY与 UNIQUE约束类似,通过建立唯一索引来保证基本表在主键列取值的唯一,但它们之间存在着很大的区别.

1.在一个基本表中只能定义一个 PRIMARY KEY约束,但可定义多个 UNIQUE约束。

2.对于指定为 PRIMARY KEY的一个列或多个列的组合,其中任何一个列都不能出现NULL值,而对于 UNIQUE所约束的唯一键,则允许为NULL。

3.不能为同一个列或一组列,既定义 UNIQUE约束,又定义 PRIMARY KEY约束。

2.4 FOREIGN KEY 约束(外键约束)

语法格式:

NOT NULL FOREIGN KEY REFERENCES 主表名(列名)

例子:

例子:

CREATE TABLE SC

( SNO VARCHAR(6) NOT NULL FOREIGN KEY REFERENCES S(SNO),

CNO VARCHAR(6) NOT NULL FOREIGN KEY REFERENCES C(CNO),

CONSTRAINT S_C_Prim PRIMARY KEY (SNO,CNO) )

1.外部键必须是主表中的一个主键值或唯一值,因此才有最后一行SQL命令

2.其次主键值不能为空,因此有NOT NULL

外键约束作用:

指定一列或几列作为外部键,包含外部键的表称为从表,

包含外部键所引用的主键或唯一键称为主表,

系统保证从表在外部键上的取值值是主表中某一个主键值或唯一键,或者取空值.

2.5 CHECK约束

CHECK约束用于检查字段值所允许的范围

语法格式:

CHECK (条件)

例子:

建立一个SC表,定义 Score的取值范围为0~100之间。

CREATE TABLE SC

( SNO VARCHAR(6)

CNO VARCHAR(6)

Score NUMERIC(4, 1) CHECK (Score>=0 AND Score<=100) )

建立CHECK约束,需要考虑以下几个因素

1.一个表中可以定义多个 CHECK约束。

2.每个字段只能定义一个 CHECK约束。

3.在多个字段上定义的 CHECK约束必须为表约束。

4.当执行 INSERT、 UPDATE语句时, CHECK约束将验证数据。

3.修改数据表

3.1 ADD方式

ADD方式用于增加新列和完整约束

语法格式:

ALTER TABLE 表名

ADD

列名 数据类型

....

3.2 ALTER方式

ALTER方式用于修改某些列

ALTER TABLE 表名

ALTER COLUMN

列名 数据类型

....

使用此方式有如下一些限制

1.不能改变列名

2.不能将含有空值的列的定义修改为 NOT NULL约束

3.若列中已有数据,则不能减少该列的宽度,也不能改变其数据类型。

4.只能修改 NULL/NOT NULL约束其他类型的约束在修改之前必须先将约束删除,然后再新添加修改过的约束定义。

3.3 DROP方式

DROP方式只用于删除完整约束定义

其语法格式为

ALTER TABLE<表名>

DROP CONSTRAINT<约束名>

【例】删除S表中的主键。

ALTER TABLE S

DROP CONSTRAINT S Prim

4.删除数据表

语法格式:

DROP TABLE 表名

四、关于数据表查询的SQL命令

1.单关系表的数据查询

1.1 无条件查询

语法格式:

SELECT 列名

FROM 表名

//1. *表示表的全部列名

SELECT *

FORM S

//2. DISTINCT关键字用于消除重复行

SELECT DISTINCT SNO

FROM SC

//3. AS 表示别名,输出别名

SELECT SN AS Name,SNO,AGE

FROM S

1.2 条件查询

运算符 含义
=、>、<、>=、<= 、!=、<> 比较大小
AND、OR、NOT 多重条件
BETWEEN AND 确定范围
IN 确定集合
LIKE 字符匹配
IS NULL 空值

语法格式:

SELECT 列名

FROM 表名

WHERE 条件

1.比较大小

> SELECT SNO,SCORE

> FROM SC WHERE CNO='C1'

2.多重条件查询 优先级从高到低:NOT、AND、OR

例:查询工资在1000元~1500元之间的教师的教师号、姓名及职称。

SELECT TNO, TN, Prof

FROM T

WHERE Sal BETWEEN 1000 AND 1500

等价于

SELECT TNO, TN Prof

FROM T

WHERE Sal>=1000 AND Sal<=1500

3.确定集合

利用"IN"操作可以查询属值属于指定集合的元组

【例】查询选修C1或C2的学生的学号、课程号和成绩。

SELECT SNO, CNo, Score

FROM SC

WHERE CNO IN('C1,C2)

此语句也可以使用逻辑运算符“OR”实现。

SELECT SNO, CNo, Sco

FROM SC

WHERE CNO='Cl' OR 'CNo' = C2

利用“NOTN”可以查询指定集合外的元组。

【例3-30】查询没有选修C1,也没有选修C2的学生的学号、课程号和成绩。

SELECT SNO, CNo, Score FROM SC

WHERE CNo NOT IN ('C1,'C2')

等价于

SELECT SNO, CNo, Score FROM-SC

WHERE (CNO <>'C1)AND (CNo<>'C2')

4.部分匹配查询

语法格式:

<属名> LIKE <字符串常量>

1

2

通配符 实例
% ab%,’ab‘后可接任意字符串
_(下划线) ‘a_b’,'a’与’b’之间可有一个字符
[ ] [0-9],0~9之间的字符
[^ ] [^0-9],不在0~9之间的字符

【例3-31】查询所有姓张的教师的教师号和姓名。 查询结果如下

SELECT TNO, TN

FROM T

WHERE TN LIKE'张%'

【例3-32】查询姓名中第二个汉字是“力”的教师号和姓名。

SELECT TNO,TN

FROM T WHERE TN LIKE’_力%'

6.空值查询

某个字段没有值称为具有空值(NUL)通常没有为一个列输入值时,该列的值就是空值。

【例3—33】查询没有考试成绩的学生的学号和相应的课程号

SELECT SNO,CNO

FROM SC

WHERE SCORE IS NULL

1.3常用库函数及统计查询

函数 功能
AVG 按列计算均值
SUM 按列计算值的总和
MAX 求一列中的最大值
MIN 求一列中的最小值
COUNT 按列值统计个数

【例】求学号为S1的学生的总分和均分。

SELECT SUM(Score) As TotalScore, AVG(Score) As AvgScore

FROM SC

WHERE (SNO =S1)

上述查询语句中AS后面的 TotalScore和 AvgScore是别名,

别名会显示在查询结果中.

让使用实例者能清楚地知道查询内容所表示的含义,

结果中就不显示列名.

注意:在使用库函数进行查询时,通常要给查询的每一项内容加别名,

否则查询结果就不会显示列名.

【例3-35】求选修C1号课程的最高分、最低分及之间相差的分数。

SELECT MAX (Score) AS MaxScore,MIN (Score) AS MinScore,

MAX(Score)- MIN(Score) AS Diff

FROM SC

WHERE (CNO ='C1')

【例3-36】求计算机系学生的总数。

SELECT COUNT( SNO) FROM S

WHERE Dept='计算机'

【例3-37】求学校中共有多少个系

SELECT COUNT (DISTINCT Dept) As DeptNum

FROM S

//注加入关键字 DISTINCT后表示消去重复行,

//可计算字段“Dept”不同值的数目。

用 COUNT(*)来统计元组个数.

1.4分组查询

1.4.1 GROUP BY子句

GROUP BY子句可以将查询结果按属列或属列组合在行的方向上进行分组,每组在属列或属列组合上具有相同的值。

【例3-40】查询每个教师的教师号及其任课的门数。

SELECT TNO, COUNT(*)AS C_Num

FROM TC

GROUP BY TNo

GROUP BY子句按TNo的值分组,

所有具有相同TNo的元组为一组,

对每一组使用函数COUNT进行计算,

统计出各位教师任课的门数。

1.4.2 HAVING子句

若在GROUP BY子句分组后还要按照一定的条件进行筛选,

则需使用 HAVING子句。

【例3-41】查询选修两门以上(含两门)课程的学生的学号和选课门数。

表的连接方法

SELECT SNO, COUNT(*) AS SC_Num

FROM SC

GROUP BY SNO

HAVING ( COUNT(*)>=2 )

GROUP BY子句按SNo的值分组,

所有具有相同SNo的元组为一组,

对每一组使用函数 COUNT进行计算,

统计出每个学生选课的门数。

HAVING子句去掉不满足 COUNT(*)>=2的组。

注意:

一、.当在一个SQL查询中同时使用 WHERE子句, GROUP BY子句和 HAVING子句时,其顺序是WHERE、 GROUP BY、HAVING。

二、WHERE与 HAVING子句的根本区别在于作用对象不同。

1.WHERE句作用于基本表或视图,从中选择满足条件的元组;

2.HAVING子句而作用于组,选择满足条件的组,必须用在 GROUP BY子句之后,但GROUP BY子句可没有 HAVING子句

1.5查询结果的排序

1.5.1 结果排序 ORDER BY子句

当需要对查询结果排序时,应该使用 ORDER BY子句, ORDER BY Y子句必须出现在其他子句之后。

排序方式可以指定,DESC为降序,ASC为升序,缺省时为序案犬认人

SQL查询语句大全

Select

Select+聚合函数

总数

count(*)表示计算总行数,括号中写星与列名,结果相同

例1.查询登录系统学总数

select count(*) from StudentBindPaperTypeEntity

最大值

max(列)求此列的最大值

例2.求下表的最大编号

select max(StudentID) from StudentBindPaperTypeEntity

最小值

min(列)求此列的最小值

例3.求下表编号最小编号

select min(StudentID) from StudentBindPaperTypeEntity

求和

sum(列)求此列之和(注:sum运算符与数字类型连用)

例4.查询当前在线的学生(IsUse=0表示未在线,1表示在线)

select SUM(IsUse) from StudentBindPaperTypeEntity

均值

avg(列) 表示求此列的均值(注:avg运算符与数字类型连用)

例5:查询学生编号的均数

select avg(StudentID) from StudentBindPaperTypeEntity

Select+case…when…then语句

case…when…then语句,相当于编程语言中if判断

例1根据IsUser字段查询学生是否在线

select a.StudentID,

(case a.IsUse

when '0' then '未在线'

when '1' then '在线' else '未上传' end) as 在线情况

from StudentBindPaperTypeEntity as a

显示情况:

select+top

top:取表中前多少的数据

例1.取出表中第几行数据(如第一行)

select top 1 * from StudentBindPaperTypeEntity

例2.取出表中百分之多少数据

select top 50 percent * from StudentBindPaperTypeEntity

from(表)+连接查询

连接查询

1.内连接:Inner join

2.左连接:Left join

3.右连接:Right join

例子中涉及的表

StudentInfoEntity:全校学生的信息

ScoreEntity:学生考试的成绩(并不全包含全校学生)

from+inner join

例1.查出这两个表中共有的信息(as为表的别名,方便)

select score.studentID,score.score,s.CollegeID,s.major,s.majorClass

from ScoreEntity as score inner join StudentInfoEntity as s on score.studentID=s.studentID

where score.CollegeID=02

显示结果

from+left join

左外连接:左表的值会全部显示出来,右表的值显示on条件搜索的的结果,搜索不到为NULL

例1两个表作左外连接

select score.studentID,score.score,s.CollegeID,s.major,s.majorClass

from StudentInfoEntity as s left join ScoreEntity as score on s.studentID=score.studentID

显示结果:(个别)

from+right join

右外连接与左外连接相反(右表的值全部显示出来)

例1两个表做右外连接

select score.studentID,score.score,s.CollegeID,s.major,s.majorClass

from ScoreEntity as score right join StudentInfoEntity as s on s.studentID=score.studentID

现在两个表换了位置,结果是一样的

Where(条件语句查询)

比较运算符

例1.查询学号>18832650890的学生

select * from StudentBindPaperTypeEntity where StudentID>18832650890

例2.查询学号!=18832650890的学生(<>同效)

select * from StudentBindPaperTypeEntity where StudentID!=18832650890

模糊查询

like

%表示任意多个字符

例1.查询1月8号考试的学生

select * from StudentBindPaperTypeEntity where TimeTamp like '2020-01-08%'

例2.查询不是1月8号考试的学生

select * from StudentBindPaperTypeEntity where TimeTamp not like '2020-01-08%'

范围查询

in关键字为非连续查询

例1.查询两个不相邻的学号的学生

select * from StudentBindPaperTypeEntity where StudentID in('19100142001','19100142006')

Between…and…为连续查询(注:sql软件情况不一样,可能不包含and后的值)

例2.查询两个学号之间的学生

select * from StudentBindPaperTypeEntity where StudentID Between 19100142001 and 19100142006

空判断

is null判断为空

例1.查询没有试卷的学生

select * from StudentBindPaperTypeEntity where PaperType is null

is not null 判断非空

例2.查询有试卷的学生

select * from StudentBindPaperTypeEntity where PaperType is not null

优先级

优先级由高到低的顺序为:小括号,not,比较运算符,逻辑运算符

and比or先运算,如果同时出现并希望先算or,需要结合()使用

group by(分组)

作用:将字段间一对多的关系,向一的方向靠拢分组

例1.查出参加考试有几个学院

select CollegeID from StudentBindPaperTypeEntity group by CollegeID

显示结果:

group by+聚合函数

例2.查出各个学院参加考试的人数

select CollegeID, count(StudentID) from StudentBindPaperTypeEntity group by CollegeID

显示结果:

其实group by + 聚合函数是从group by + group_concat()演变过来的,SqlServer不支持这个函数

group by+having

having的作用跟where子句功能一样,只不过having只用在group by

例3.查出学院ID大于10的学院

select CollegeID from StudentBindPaperTypeEntity group by CollegeID having CollegeID>10

显示结果:

Order by(排序)

排序查询语法:

select * from 表名 order by 列1 asc|desc [,列2 asc|desc,...]

如果列1的值相同,则按照列2排序,以此类推

1.asc从小到大

2.desc从大到小

例1.根据学院分组ID降序(desc)

select CollegeID from StudentBindPaperTypeEntity group by CollegeID order by CollegeID desc

例2.将上表升序(asc)

select CollegeID from StudentBindPaperTypeEntity group by CollegeID order by CollegeID asc


网站简介 网站团队 本网动态 友情链接 版权声明 我要投稿

Copyright© 2014-2020 中原网视台(www.hnmdtv.com) All rights reserved.