SQL server 简单语法 包含创建数据库、建表、查询、插入、比较、排序、数据处理等_sql server语法-程序员宅基地

技术标签: sqlserver  数据库  SQL  sql  


代码运行软件: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、查询指定的列

  1. 查询指定的一列
SELECT 列名 FROM 表名;
--查询courseName一列
USE COURSE;--连接COURSE数据库
SELECT courseName FROM course;
  1. 查询指定的多列
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;
  1. 指定获取结果时,可以使用百分比代替行数。
--以指定多列为例
SELECT TOP(百分比) PERCENT 列名1,列名2,..,列名n FROM 表名;
--查询前20%
USE COURSE;--连接COURSE数据库
SELECT TOP(20) PERCENT * FROM course;

1.5、数据排序

  1. **ORDER BY 排序:**通过ORDER BY 子句能够以指定的列为基准对数据进行排序。
--以指定多列为例
SELECT 列名1,列名2,..,列名n FROM 表名 ORDER BY 列名 ASC;  --ASC表示降序排序,可以不写
SELECT 列名1,列名2,..,列名n FROM 表名 ORDER BY 列名 DESC;  --DESC表示升序排序
  1. 复杂排序:如果指定了多列作为基准,就能以更加详细的条件进行排序
--以指定多列为例
SELECT 列名1,列名2,..,列名n FROM 表名 ORDER BY 列名1,列名2,...,列名N;  --首先以列名1排序,如果列名1相同,再看列名2,-      															  --一直往下
  1. 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、算术运算符

  1. 计算数值的运算符:
运算符和功能 使用方法
+(加法) a+b
-(减法) a-b
*(乘法) a*b
/(除法) a/b
%(求余) a%b
  1. **使用方法:**使用算术运算符时,将数值和列名与运算符组合起来。可以利用()设置优先级。
--以乘法举例
列名 * 数值
列名 * 列名
--将学生人数加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); 
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_55880219/article/details/127200127

智能推荐

c# 调用c++ lib静态库_c#调用lib-程序员宅基地

文章浏览阅读2w次,点赞7次,收藏51次。四个步骤1.创建C++ Win32项目动态库dll 2.在Win32项目动态库中添加 外部依赖项 lib头文件和lib库3.导出C接口4.c#调用c++动态库开始你的表演...①创建一个空白的解决方案,在解决方案中添加 Visual C++ , Win32 项目空白解决方案的创建:添加Visual C++ , Win32 项目这......_c#调用lib

deepin/ubuntu安装苹方字体-程序员宅基地

文章浏览阅读4.6k次。苹方字体是苹果系统上的黑体,挺好看的。注重颜值的网站都会使用,例如知乎:font-family: -apple-system, BlinkMacSystemFont, Helvetica Neue, PingFang SC, Microsoft YaHei, Source Han Sans SC, Noto Sans CJK SC, W..._ubuntu pingfang

html表单常见操作汇总_html表单的处理程序有那些-程序员宅基地

文章浏览阅读159次。表单表单概述表单标签表单域按钮控件demo表单标签表单标签基本语法结构<form action="处理数据程序的url地址“ method=”get|post“ name="表单名称”></form><!--action,当提交表单时,向何处发送表单中的数据,地址可以是相对地址也可以是绝对地址--><!--method将表单中的数据传送给服务器处理,get方式直接显示在url地址中,数据可以被缓存,且长度有限制;而post方式数据隐藏传输,_html表单的处理程序有那些

PHP设置谷歌验证器(Google Authenticator)实现操作二步验证_php otp 验证器-程序员宅基地

文章浏览阅读1.2k次。使用说明:开启Google的登陆二步验证(即Google Authenticator服务)后用户登陆时需要输入额外由手机客户端生成的一次性密码。实现Google Authenticator功能需要服务器端和客户端的支持。服务器端负责密钥的生成、验证一次性密码是否正确。客户端记录密钥后生成一次性密码。下载谷歌验证类库文件放到项目合适位置(我这边放在项目Vender下面)https://github.com/PHPGangsta/GoogleAuthenticatorPHP代码示例://引入谷_php otp 验证器

【Python】matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距-程序员宅基地

文章浏览阅读4.3k次,点赞5次,收藏11次。matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距

docker — 容器存储_docker 保存容器-程序员宅基地

文章浏览阅读2.2k次。①Storage driver 处理各镜像层及容器层的处理细节,实现了多层数据的堆叠,为用户 提供了多层数据合并后的统一视图②所有 Storage driver 都使用可堆叠图像层和写时复制(CoW)策略③docker info 命令可查看当系统上的 storage driver主要用于测试目的,不建议用于生成环境。_docker 保存容器

随便推点

网络拓扑结构_网络拓扑csdn-程序员宅基地

文章浏览阅读834次,点赞27次,收藏13次。网络拓扑结构是指计算机网络中各组件(如计算机、服务器、打印机、路由器、交换机等设备)及其连接线路在物理布局或逻辑构型上的排列形式。这种布局不仅描述了设备间的实际物理连接方式,也决定了数据在网络中流动的路径和方式。不同的网络拓扑结构影响着网络的性能、可靠性、可扩展性及管理维护的难易程度。_网络拓扑csdn

JS重写Date函数,兼容IOS系统_date.prototype 将所有 ios-程序员宅基地

文章浏览阅读1.8k次,点赞5次,收藏8次。IOS系统Date的坑要创建一个指定时间的new Date对象时,通常的做法是:new Date("2020-09-21 11:11:00")这行代码在 PC 端和安卓端都是正常的,而在 iOS 端则会提示 Invalid Date 无效日期。在IOS年月日中间的横岗许换成斜杠,也就是new Date("2020/09/21 11:11:00")通常为了兼容IOS的这个坑,需要做一些额外的特殊处理,笔者在开发的时候经常会忘了兼容IOS系统。所以就想试着重写Date函数,一劳永逸,避免每次ne_date.prototype 将所有 ios

如何将EXCEL表导入plsql数据库中-程序员宅基地

文章浏览阅读5.3k次。方法一:用PLSQL Developer工具。 1 在PLSQL Developer的sql window里输入select * from test for update; 2 按F8执行 3 打开锁, 再按一下加号. 鼠标点到第一列的列头,使全列成选中状态,然后粘贴,最后commit提交即可。(前提..._excel导入pl/sql

Git常用命令速查手册-程序员宅基地

文章浏览阅读83次。Git常用命令速查手册1、初始化仓库git init2、将文件添加到仓库git add 文件名 # 将工作区的某个文件添加到暂存区 git add -u # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,不处理untracked的文件git add -A # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,包括untracked的文件...

分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120-程序员宅基地

文章浏览阅读202次。分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120

【C++缺省函数】 空类默认产生的6个类成员函数_空类默认产生哪些类成员函数-程序员宅基地

文章浏览阅读1.8k次。版权声明:转载请注明出处 http://blog.csdn.net/irean_lau。目录(?)[+]1、缺省构造函数。2、缺省拷贝构造函数。3、 缺省析构函数。4、缺省赋值运算符。5、缺省取址运算符。6、 缺省取址运算符 const。[cpp] view plain copy_空类默认产生哪些类成员函数

推荐文章

热门文章

相关标签