SQL server 简单语法 包含创建数据库、建表、查询、插入、比较、排序、数据处理等
数据库(Database,DB):按照数据结构来组织、存储和管理数据的仓库,其本身可看作电子化的文件柜,用户可以对文件中的数据进行增加、删除、修改、查找等操作。数据库基于某种目的以及规则进行管理的数据汇总。用于操作数据库的语言。数据库的分类:分为层次型、网型、关系型。层次型数据库:数据由一对多的亲子节点所连接,类似于数据结构中的树结构,是一种很古老的数据库形态,很难对信息进行击中管理。网型数据库。
文章目录
代码运行软件:SQL server 2019
0、数据库简介(了解)
数据库(Database,DB):按照数据结构来组织、存储和管理数据的仓库,其本身可看作电子化的文件柜,用户可以对文件中的数据进行增加、删除、修改、查找等操作。数据库基于某种目的以及规则进行管理的数据汇总。
SQL(Structured Query Language): 用于操作数据库的语言。
**数据库的分类:**分为层次型、网型、关系型。
层次型数据库:数据由一对多的亲子节点所连接,类似于数据结构中的树结构,是一种很古老的数据库形态,很难对信息进行击中管理。
网型数据库:数据以多对多的方式进行连接,类似与数据结构中的图结构,虽然可以集中管理数据,但是数据间的关系过于复杂,管理起来非常困难。
关系型数据库:数据通过行和列所构成的表进行管理。各个数据间保持独立、便于管理,并且表之前可以自由组合关联,因此,是现今最广泛应用的数据库类型。
数据库管理系统(Database Management System,DBMS):是一种操纵和管理数据库的大型软件,是用于建立、使用和维护数据库。它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。主要具有数据的插入、更新、删除、排序、查询、共享(由多个软件共享数据)
0.1、关系数据库
关系数据库:通过行(row)和列(column)所构成的表形式来管理数据,即称为表(table)。关系数据库拥有表之间进行关联的运作机制。关系数据库是由名为**关系数据库管理系统(Relational Database Management System,简称RDBMS)**的软件进行管理。关系数据库具体代表有SQL server、Oracle、MySQL、PostgreSQL等。
主键(primary key):是指表中用于标识某一行的列。比如,在一张表中,我们可以对一个学号、职工号等对某人进行标识、区分,避免不同人的属性相同造成的混乱,无法区分。在一个表中只能设置唯一的一个主键。同时,给表设置主键后,能轻松的对表进行关联。
复合主键:有时只把一列设置为主键,无法区分,例如,地址的数据表中,只把区作为主键,会存在市、县等相同的情况,达不到区分,虽然主键在一张表格中只能设置一个,但是可以把多个列组合到一起作为主键使用,称这样的主键为复合主键。
视图:在现有的表中提取需要的部分,抛弃原有的格式,作为虚拟的表进行展示的功能,就是视图。
1、SQL基础
1.0、SQL功能分类
根据数据库语言的功能可分为:数据定义语言(DDL:Data Definition Language)、数据操作语言(DML:Data Manipulation Language)、数据控制语言(Data Control Language)。
1.1、数据库和表的创建
1.1.1、数据库创建
**数据库创建:**数据存储在表内,而表又保存在数据库中,故首先要创建数据库。创建数据库时使用的是CREATE DATABASE 语句。
代码运行软件:SQL server 2019
CREATE DATABASE 数据库名; --SQL语句不区分大小写
--SQL示例 创建COURSE数据库
CREATE DATABASE COURSE;
1.1.2、选择数据库
选择数据库:RDBMS在连接之后会自动选择默认的数据库。因此想要在SQL server中使用新创建的数据库,需要通过USE来选择。
USE 数据库名; --如果不选择对应的数据库,就无法使用其中的值。
1.1.3、 表的创建
**创建表格:**创建表格时,使用CREATE TABLE语句。
--简单的表结构,其中的变量名就是表中的列名
CREATE TABLE 表名(
存储变量名1 变量类型1,
存储变量名2 变量类型2,
.....
存储变量名n 变量类型n
);
--SQL示例 创建course表
CREATE TABLE course(
courseName VARCHAR(20),
teacherName VARCHAR(10),
studentPeople INT,
teacherID INT
);
1.2、表约束
1.2.1、约束
约束:是用来保证存入的数据能够一直保持正确状态的条件。创建表时,设置约束,可以对数据的输入进行控制。
约束分类:一种时设置在单列上的列级约束,另一种是同时作用于多个列的表级约束,而复合约束则是属于后者。
列级约束:写在数据类型之后,空格进行分隔。
表级约束:写在所有列的定义后。
--SQL示例 增加约束
CREATE TABLE course(
courseName VARCHAR(20),
teacherName VARCHAR(10),
studentPeople INT UNIQUE, --列级约束:对学生人数进行约定
teacherID INT,
PRIMARY KEY (teacherName,teacherID) --表级约束:对老师姓名,以及其职工号进行约束,定义复合主键
);
1.2.2、重要的约束种类
约束的主要几种:
约束 | 功能 |
---|---|
PRIMARY KEY (主键) | 禁止数据重复,禁止NULL值 |
UNIQUE | 数据具有唯一性 |
CHECK(表达式) | 预先准备表达式,禁止与之不符的数据 |
NOT NULL | 禁止NULL 值 |
DEFAULT = 值 | 预先设置的值将会作为默认值 |
1.3、添加数据
添加数据:向表中添加数据时,使用INSERT 语句,需要添加数据的目的表则跟在INTO之后。
INSERT INTO 目的表名 (变量名1,变量名2,...,变量名n) VALUES (数据1,数据2,...,数据n);
USE COURSE; --连接COURSE数据库
INSERT INTO course(courseName,teacherName,studentPeople,teacherID) VALUES ('Java语言','TL2',64,981097);
1.4、查询
1.4.1 查询全部
**获取数据:**从表中获取已有的数据时,使用SELECT语句,从什么表中获得,可用FROM语句指定
SELECT * FROM 表名; --星号(*)表示提取全部列
--SQL获取全部数据
USE COURSE;--连接COURSE数据库
SELECT * FROM course;
1.4.2、查询指定的列
- 查询指定的一列:
SELECT 列名 FROM 表名;
--查询courseName一列
USE COURSE;--连接COURSE数据库
SELECT courseName FROM course;
- 查询指定的多列:
SELECT 列名1,列名2,..,列名n FROM 表名;
--查询courseName和teacherID
USE COURSE;--连接COURSE数据库
SELECT courseName,teacherID FROM course;
1.4.3、指定条件查询
**指定条件查询:**只提取特定条件的数据时,使用WHERE子句。
--以指定多列为例
SELECT 列名1,列名2,..,列名n FROM 表名 WHERE 表达式;
--查询学生人数大于64的课程
USE COURSE;--连接COURSE数据库
SELECT * FROM course WHERE studentPeople >64;
1.4.4、指定数量进行查询
SQL server的指定方法:
1.使用TOP子句可以指定从前往后提取行数。
--以指定多列为例
SELECT TOP(行数) PERCENT 列名1,列名2,..,列名n FROM 表名;
--查询前五行
USE COURSE;--连接COURSE数据库
SELECT TOP(5) * FROM course;
- 指定获取结果时,可以使用百分比代替行数。
--以指定多列为例
SELECT TOP(百分比) PERCENT 列名1,列名2,..,列名n FROM 表名;
--查询前20%
USE COURSE;--连接COURSE数据库
SELECT TOP(20) PERCENT * FROM course;
1.5、数据排序
- **ORDER BY 排序:**通过ORDER BY 子句能够以指定的列为基准对数据进行排序。
--以指定多列为例
SELECT 列名1,列名2,..,列名n FROM 表名 ORDER BY 列名 ASC; --ASC表示降序排序,可以不写
SELECT 列名1,列名2,..,列名n FROM 表名 ORDER BY 列名 DESC; --DESC表示升序排序
- 复杂排序:如果指定了多列作为基准,就能以更加详细的条件进行排序
--以指定多列为例
SELECT 列名1,列名2,..,列名n FROM 表名 ORDER BY 列名1,列名2,...,列名N; --首先以列名1排序,如果列名1相同,再看列名2,- --一直往下
- WHERE条件排序:WHERE子句和ORDER BY子句组合起来使用
--以指定多列为例
SELECT 列名1,列名2,..,列名n FROM 表名 WHERE 表达式 ORDER BY 列名 DESC;
--查询teacherName为TL2的数据,并降序排列
USE COURSE;--连接COURSE数据库
SELECT * FROM course WHERE teacherName= 'TL2' ORDER BY teacherID ASC;
1.6、对数据进行分组
对数据进行分组:使用GROUP BY 之后,指定的列中拥有相同的数据的行,将会分组合并到一行中。要与聚合函数一起使用。
SELECT 列名,聚合函数 FROM 表名 GROUP BY 列名;
--对teacherName进行分组
USE COURSE;--连接COURSE数据库
SELECT teacherName,COUNT(teacherName) FROM course GROUP BY teacherName;
1.7、去除重复的数据
去除重复的数据:使用DISTINCT可以去除数据中重复的部分。
--以指定多列为例
SELECT DISTINCT 列名1,列名2,..,列名n FROM 表名;
--去除teacherName相同的部分,数据库里并没用去除,只是显示的时候去除显示
USE COURSE;--连接COURSE数据库
SELECT DISTINCT teacherName FROM course;
1.8、改变显示列名
改变显示列名:利用AS运算符可以把现有的列名变成其他名称,但生效的位置只是显示名称,并不会改变原来的列名。
SELECT 原有列名 AS 更改改后的列名 FROM 表名;
1.9、数据类型
1.9.1、整数型
整数类型表:处理整数
使用方法 | 可处理的数据 |
---|---|
INT | 整数 |
SMALLINT | 比INT范围更下的正数 |
1.9.2 实数型
实数型表:处理带有小数点的数值
使用方法 | 可处理数据 |
---|---|
DECIMAL(m,n) | 可以决定数值精度,其中m表示总位数,而n表示小数点以后的位数,m、n可以省略,如果省略,则小数部分四舍五入。 |
NUMERIC(m,n) | 可以决定数值精度,其中m表示总位数,而n表示小数点以后的位数,m、n可以省略,如果省略,则小数部分四舍五入。 |
REAL | 单精度浮点数 |
FLOAT(n) | 浮点数,如果n<24,则与REAL相同。 |
FLOAT(53) | 双精度浮点数 |
1.9.3、字符串型
字符串型:处理字符串
使用方法 | 可处理数据 |
---|---|
CHAR(n) | 长度固定的字符串(n字节内) |
VARCHAR(n) | 长度可变的字符串(n字节内) |
TEXT | 文本类的大量字符串 |
NCHAR(n) | 长度固定的UNICODE字符串(n字节内) |
NVARCHAR(n) | 长度可变的UNICODE字符串(n字节内) |
NTEXT | 文本类的大量UNICODE字符串 |
1.9.4、日期和时间类型
**日期和时间类型:**处理日期和时间
使用方法 | 可处理数据 |
---|---|
DATA | 日期(YYYY-MM-DD) |
TIME | 时间(HH:MM:SS) |
SMALLDATATIME | 自动更新的日期和时间(精确分钟) |
DATATIME | 自动更新的日期和时间(精确毫秒) |
DATATIME2 | 自动更新的日期和时间(精确纳秒) |
1.9.5、布尔型
布尔型:处理真假判断
使用方法 | 可处理数据 |
---|---|
BOOLEAN | TRUE(真)、FALSE(假)、UNKNOW(未知)其中之一 |
1.9.6、二进制型
**二进制型:**处理图像数据、声音数据等无法用文本或数值来表示的数据,由于本文以SQL server为基础编译的数据库,故有部分可能与SQL99有出入,但相差不大
使用方法 | 可处理的数据 |
---|---|
BIT/BINARY | 长度固定的bit列(上限为n bit)SQL server不能指定长度n |
VARBINARY | 长度可变的bit列(上限为n bit)SQL server不能指定长度n |
VARBINARY | 二进制数据 |
2、运算符
2.1、算术运算符
- 计算数值的运算符:
运算符和功能 | 使用方法 |
---|---|
+(加法) | a+b |
-(减法) | a-b |
*(乘法) | a*b |
/(除法) | a/b |
%(求余) | a%b |
- **使用方法:**使用算术运算符时,将数值和列名与运算符组合起来。可以利用()设置优先级。
--以乘法举例
列名 * 数值
列名 * 列名
--将学生人数加33并改变列名显示
USE COURSE;--连接COURSE数据库
SELECT courseName,(studentPeople + 33) AS studentSUM FROM course;
2.2、比较运算符
比较运算符:在WHERE子句中加入值或数值之间进行比较的条件表达式,会改变语句的处理方式。条件成立时,表达式返回运算结果“true”,反之结果为“false”。
运算符 | 使用方法 | 含义 |
---|---|---|
= | a=b | a等于b |
< | a<b | a小于b |
<= | a<=b | a小于等于b |
> | a>b | a大于b |
>= | a>=b | a大于等于b |
<> 或者 != | a<>b 或者 a!=b | a不等于b |
--建立学生数据库,并进行运算符操作
--CREATE DATABASE STUDENT;
USE STUDENT;
--CREATE TABLE student(
-- id INT,
-- [name] VARCHAR(10),
-- ENGLISH INT,
-- MATH INT
--);
INSERT INTO student (id,[name],ENGLISH,MATH) VALUES (201212,'TL1',86,70);
INSERT INTO student (id,[name],ENGLISH,MATH) VALUES (202014,'TL2',90,90);
INSERT INTO student (id,[name],ENGLISH,MATH) VALUES (202014,'TL3',87,84);
INSERT INTO student (id,[name],ENGLISH,MATH) VALUES (202014,'TL4',86,86);
INSERT INTO student (id,[name],ENGLISH,MATH) VALUES (202014,'TL5',82,73);
INSERT INTO student (id,[name],ENGLISH,MATH) VALUES (202014,'TL6',79,86);
INSERT INTO student (id,[name],ENGLISH,MATH) VALUES (202014,'TL7',91,95);
--使用WHERE子句把条件为false的踢出,选出满足true的数据
USE STUDENT;--连接COURSE数据库
SELECT [NAME],MATH FROM student WHERE MATH >= 90;
2.3、逻辑运算符
逻辑运算符:可以把多个条件组合起来,形成更加复杂的条件。
运算符 | 使用方法 | 含义 |
---|---|---|
AND (与) | (a>10)and (a<20) | a大于10且a小于20 |
OR(或) | (a=5) or (a=10) | a等于5或10 |
NOT(非) | not (a=20) | a不等于20 |
--选出数学大于80且小于90时的数据
USE STUDENT;--连接COURSE数据库
SELECT [NAME],MATH FROM student WHERE (MATH < 90) AND (MATH > 80);
2.4、字符处理运算符
2.4.1、字符串联运算符
字符串联运算符:把字符连接起来,SQL server 用+运算符。
列名 + 列名
--例如:
SELECT 列名1+列名2 FROM 表名;
2.4.2、字符串比较选取
字符串比较:想获取字符串中包含特定的字符串的数据时,需要使用LIKE 运算符。
设定方法:
运算符 | 功能 | 使用方法 | 含义 |
---|---|---|---|
% | 相当与0~任意长度的文字列 | %T% | 包含T的任何字符串 |
_(下划线) | 相当于一个字符 | T_ | 以T开头的两个字符的字符串 |
--选取出name中含T开头的数据
USE STUDENT;--连接COURSE数据库
SELECT * FROM student WHERE [name] LIKE 'T%'; --其中name为进行比较的列名,T%表示以T开头的字符串
2.5、其他字符串
2.5.1、BETWEEN运算符
BETWEEN运算符:使用between~and可以指定范围,可用比较运算符替换
列名 BETWEEN 小范围数 AND 大范围数
--选出数学大于80且小于90时的数据
USE STUDENT;--连接COURSE数据库
SELECT [NAME],MATH FROM student WHERE MATH BETWEEN 80 AND 90;
2.5.2、IS NULL运算符
IS NULL运算符:判断指定列的值是否为NULL。
列名 IS NULL ....指定列的值为NULL,则为true,否则为false
列名 IS NOT NULL ....指定列的值不为NULL,则为true,否则为false
2.5.3、IN运算符
**IN运算符:**使用IN运算符,仅会从特定的数据里面提取与()中某项值相同的数据,判断数据是否在IN后面的数据中。其中NOT IN 则表示指定值意外的数据,可用比较运算符替换
列名 IN (数据1,数据2,...,数据N)
列名 NOT IN (数据1,数据2,...,数据N)
--选出数学为80或90的数据
USE STUDENT;--连接COURSE数据库
SELECT [NAME],MATH FROM student WHERE MATH IN (80 , 90);
更多推荐
所有评论(0)