From abc42e02b628636a89736789e123cec1d3bf31e4 Mon Sep 17 00:00:00 2001 From: unknown <2990214834@qq.com> Date: Wed, 21 Sep 2022 10:29:14 +0800 Subject: [PATCH] =?UTF-8?q?20=E7=8E=8B=E4=B8=96=E8=B4=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../2022.9.15\344\275\234\344\270\232.sql" | 71 +++++++++++++++++++ .../2022.9.15\347\254\224\350\256\260.md" | 53 ++++++++++++++ .../\344\275\234\344\270\232.sql" | 65 +++++++++++++++++ ...02\350\257\276\347\254\224\350\256\260.md" | 39 ++++++++++ ...1\346\254\241\344\275\234\344\270\232.sql" | 64 +++++++++++++++++ ...11\346\254\241\347\254\224\350\256\260.md" | 11 +++ 6 files changed, 303 insertions(+) create mode 100644 "20\347\216\213\344\270\226\350\264\242/2022-9-15\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/2022.9.15\344\275\234\344\270\232.sql" create mode 100644 "20\347\216\213\344\270\226\350\264\242/2022-9-15\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/2022.9.15\347\254\224\350\256\260.md" create mode 100644 "20\347\216\213\344\270\226\350\264\242/2022-9-16\347\254\254\344\272\214\346\254\241\344\275\234\344\270\232/\344\275\234\344\270\232.sql" create mode 100644 "20\347\216\213\344\270\226\350\264\242/2022-9-16\347\254\254\344\272\214\346\254\241\344\275\234\344\270\232/\347\254\254\344\272\214\350\212\202\350\257\276\347\254\224\350\256\260.md" create mode 100644 "20\347\216\213\344\270\226\350\264\242/2022-9-19\347\254\254\344\270\211\346\254\241\344\275\234\344\270\232/2022-9-19\347\254\254\344\270\211\346\254\241\344\275\234\344\270\232.sql" create mode 100644 "20\347\216\213\344\270\226\350\264\242/2022-9-19\347\254\254\344\270\211\346\254\241\344\275\234\344\270\232/2022-9-19\347\254\254\344\270\211\346\254\241\347\254\224\350\256\260.md" diff --git "a/20\347\216\213\344\270\226\350\264\242/2022-9-15\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/2022.9.15\344\275\234\344\270\232.sql" "b/20\347\216\213\344\270\226\350\264\242/2022-9-15\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/2022.9.15\344\275\234\344\270\232.sql" new file mode 100644 index 0000000..abcc955 --- /dev/null +++ "b/20\347\216\213\344\270\226\350\264\242/2022-9-15\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/2022.9.15\344\275\234\344\270\232.sql" @@ -0,0 +1,71 @@ +--创建数据库 +if exists (select * from sys.databases where name = 'DBTEST') +drop database DBTEST +create database DBTEST; + + +--部门信息表(sectionInfo) +-- 部门编号 sectionID int 标识列 主键 +-- 部门名称 sectionName varchar(10) 不能为空 + +create table sectionInfo( + sectionID int primary key identity(1,1), + sectionName varchar(10) not null +) + +insert sectionInfo values('研发'); +insert sectionInfo values('生产'); +insert sectionInfo values('财务'); +insert sectionInfo values('人事'); +insert sectionInfo values('计划'); + +-- select * from sectionInfo; + +--员工信息表(userInfo) +-- 员工编号 userNo int 标识列 主键 不允许为空 +-- 员工姓名 userName varchar(10) 唯一约束 不允许为空 长度必须大于4 +-- 员工性别 userSex varchar(2) 不允许为空 只能是男或女 +-- 员工年龄 userAge int 不能为空 范围在1-100之间 +-- 员工地址 userAddress varchar(50) 默认值为“湖北” +-- 员工部门 userSection int 外键,引用部门信息表的部门编号 + +--drop table userInfo; + +create table userInfo ( + userNo int identity(1,1) primary key not null, + userName varchar(10) unique not null check(len(userName) > 4), + userSex varchar(2) not null check(userSex = '男' or userSex = '女') , + userAge int not null check(userAge between 1 and 100), + userAddress varchar(50) default '湖北', + userSection int references sectionInfo(sectionId) +); + +insert userInfo (userName,userSex,userAge,userAddress,userSection) +values ('张三123','男','25','福建','1'), + ('李四123','女','30','上海','2'), + ('王五123','女','36','上海','3'), + ('赵六123','女','40','广州','4'), + ('11223','女','27','广州','5'); +--select * from userInfo + +--员工考勤表(workInfo) +-- 考勤编号 workId int 标识列 主键 不能为空 +-- 考勤员工 userId int 外键 引用员工信息表的员工编号 不能为空 +-- 考勤时间 workTime datetime 不能为空 +-- 考勤说明 workDescription varchar(40) 不能为空 内容只能是“迟到”,“早退”,“旷工”,“病假”,“事假”中的一种 + +create table workInfo( + workId int identity(1,1) primary key not null, + userId int references userInfo(userNo) not null, + workTime datetime not null, + workDescription varchar(40) not null check(workDescription = '迟到' or workDescription = '早退' or workDescription = '旷工' or workDescription = '病假' or workDescription = '事假') +) +insert workInfo(userId,workTime,workDescription) +values (1,'2022-1-15 15:15:1','迟到'), + (2,'2022-1-16 15:15:1','早退'), + (3,'2022-1-14 15:15:1','旷工'), + (4,'2022-1-16 15:15:1','病假'), + (5,'2022-1-12 15:15:1','事假'); + + +--select * from workInfo \ No newline at end of file diff --git "a/20\347\216\213\344\270\226\350\264\242/2022-9-15\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/2022.9.15\347\254\224\350\256\260.md" "b/20\347\216\213\344\270\226\350\264\242/2022-9-15\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/2022.9.15\347\254\224\350\256\260.md" new file mode 100644 index 0000000..eee29aa --- /dev/null +++ "b/20\347\216\213\344\270\226\350\264\242/2022-9-15\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/2022.9.15\347\254\224\350\256\260.md" @@ -0,0 +1,53 @@ +# 1.约束 + +- 主键约束 primary key + + ```sql + create table a( + id int primary key identity(1,1) + ) + ``` + + ```sql + alter table 表名 alter column 主键列名 主键类型 not null; + ``` + + + +- 外键约束 foreig key references + +```sql + --修改表结构 表名 add constraint 约束名 foreign key(要引用的字段) references 主键表(字段) + Alter table StuInfo add constraint FK_StuInfo_ClassId foreign key(ClassID) references ClassInfo(ClassID) +``` + +```sql +ClassID int references ClassInfo(ClassID) + ClassID int +``` + +- 默认 default + + ```sql + userAddress varchar(50) default '湖北' + ``` + +- 唯一 unique + + ```sql + userName varchar(10) unique + ``` + +- check + +- 如果对单个列定义 CHECK 约束,那么该列只允许特定的值。 + + 如果对一个表定义 CHECK 约束,那么此约束会基于行中其他列的值在特定的列中对值进行限制。 + + ```sql + userAge int not null check(userAge between 1 and 100) + ``` + + + +- 非空 not null \ No newline at end of file diff --git "a/20\347\216\213\344\270\226\350\264\242/2022-9-16\347\254\254\344\272\214\346\254\241\344\275\234\344\270\232/\344\275\234\344\270\232.sql" "b/20\347\216\213\344\270\226\350\264\242/2022-9-16\347\254\254\344\272\214\346\254\241\344\275\234\344\270\232/\344\275\234\344\270\232.sql" new file mode 100644 index 0000000..a2e93a4 --- /dev/null +++ "b/20\347\216\213\344\270\226\350\264\242/2022-9-16\347\254\254\344\272\214\346\254\241\344\275\234\344\270\232/\344\275\234\344\270\232.sql" @@ -0,0 +1,65 @@ +--1. 查询出武汉地区所有的员工信息,要求显示部门名称以及员工的详细资料 + +select * from People +inner join Department on People.DepartmentId=Department.DepartmentId +where PeopleAddress='武汉' + +--2. 查询出武汉地区所有的员工信息,要求显示部门名称,职级名称以及员工的详细资料 + +select * from People +inner join Department on People.DepartmentId=Department.DepartmentId +inner join Rank on People.RankId=Rank.RankId +where PeopleAddress ='武汉' + +--3. 根据部门分组统计员工人数,员工工资总和,平均工资,最高工资和最低工资。 + +select DepartmentName,COUNT(People.DepartmentId)人数,SUM(PeopleSalary)工资总和,AVG(PeopleSalary)平均工资,MAX(PeopleSalary)最高工资,MIN(PeopleSalary)最低工资 from People +inner join Department on People.DepartmentId=Department.DepartmentId +group by DepartmentName + +--4. 根据部门分组统计员工人数,员工工资总和,平均工资,最高工资和最低工资,平均工资在10000 以下的不参与统计,并且根据平均工资降序排列。 + +select DepartmentName,COUNT(People.DepartmentId)人数,SUM(PeopleSalary)工资总和,AVG(PeopleSalary)平均工资,MAX(PeopleSalary)最高工资,MIN(PeopleSalary)最低工资 from People +inner join Department on People.DepartmentId=Department.DepartmentId +group by DepartmentName +having AVG(PeopleSalary)>=10000 +order by AVG(PeopleSalary) desc + +--5. 根据部门名称,然后根据职位名称,分组统计员工人数,员工工资总和,平均工资,最高工资和最低工资 + +select DepartmentName,RankId,COUNT(People.DepartmentId)人数,SUM(PeopleSalary)工资总和,AVG(PeopleSalary)平均工资,MAX(PeopleSalary)最高工资,MIN(PeopleSalary)最低工资 from People +inner join Department on People.DepartmentId=Department.DepartmentId +group by RankId,DepartmentName + +--6.查询出巨蟹 6.22--7.22 的员工信息 + +select * from People where MONTH(PeopleBirth)+CONVERT(float,DAY(PeopleBirth))/100 between 6.22 and 7.22 + +--7.查询所有员工信息,添加一列显示属相(鼠,牛,虎,兔,龙,蛇,马,羊,猴,鸡,狗,猪) + +select *, case + when year(PeopleBirth)%12 =0 + then '猴' + when YEAR(PeopleBirth)%12=1 + then '鸡' + when YEAR(PeopleBirth)%12=2 + then '狗' + when YEAR(PeopleBirth)%12=3 + then '猪' + when YEAR(PeopleBirth)%12=4 + then '鼠' + when YEAR(PeopleBirth)%12=5 + then '牛' + when YEAR(PeopleBirth)%12=6 + then '虎' + when YEAR(PeopleBirth)%12=7 + then '兔' + when YEAR(PeopleBirth)%12=8 + then '龙' + when YEAR(PeopleBirth)%12=9 + then '蛇' + when YEAR(PeopleBirth)%12=10 + then '马' + when YEAR(PeopleBirth)%12=11 + then '羊' + end 生肖 from People \ No newline at end of file diff --git "a/20\347\216\213\344\270\226\350\264\242/2022-9-16\347\254\254\344\272\214\346\254\241\344\275\234\344\270\232/\347\254\254\344\272\214\350\212\202\350\257\276\347\254\224\350\256\260.md" "b/20\347\216\213\344\270\226\350\264\242/2022-9-16\347\254\254\344\272\214\346\254\241\344\275\234\344\270\232/\347\254\254\344\272\214\350\212\202\350\257\276\347\254\224\350\256\260.md" new file mode 100644 index 0000000..71a948a --- /dev/null +++ "b/20\347\216\213\344\270\226\350\264\242/2022-9-16\347\254\254\344\272\214\346\254\241\344\275\234\344\270\232/\347\254\254\344\272\214\350\212\202\350\257\276\347\254\224\350\256\260.md" @@ -0,0 +1,39 @@ +# 1.模糊查询 + +``` +[]:代表匹配范围内 +[^]:代表匹配不在范围内 +select * from Department where DepartmentId like '[1-3]' + +// [1-3] == 1,2,3 + +select * from Department where DepartmentId like '[^1-3]' + +//[^1-3] == 4 +``` + +# 2.CONVERT()与CAST()函数: + +``` +convert(decimal(13,2),12.45454) +cast(12.45454 as decimal(13,2)) +``` + +# 3.时间函数 + +``` +select DATEDIFF(day, '2019-08-20', getDate()); --获取指定时间单位的差值 +SELECT DATEADD(MINUTE,-5,GETDATE()) --加减时间,此处为获取五分钟前的时间,MINUTE 表示分钟,可为 YEAR,MONTH,DAY,HOUR +select DATENAME(month, getDate()); --当前月份 +select DATENAME(WEEKDAY, getDate()); --当前星期几 +select DATEPART(month, getDate()); --当前月份 +select DAY(getDate()); --返回当前日期天数 +select MONTH(getDate()); --返回当前日期月数 +select YEAR(getDate()); --返回当前日期年数 + +SELECT CONVERT(VARCHAR(22),GETDATE(),20) --2020-01-09 14:46:46 +SELECT CONVERT(VARCHAR(24),GETDATE(),21) --2020-01-09 14:46:55.91 +SELECT CONVERT(VARCHAR(22),GETDATE(),23) --2020-01-09 +SELECT CONVERT(VARCHAR(22),GETDATE(),24) --15:04:07 +Select CONVERT(varchar(20),GETDATE(),14) --15:05:49:330 +``` \ No newline at end of file diff --git "a/20\347\216\213\344\270\226\350\264\242/2022-9-19\347\254\254\344\270\211\346\254\241\344\275\234\344\270\232/2022-9-19\347\254\254\344\270\211\346\254\241\344\275\234\344\270\232.sql" "b/20\347\216\213\344\270\226\350\264\242/2022-9-19\347\254\254\344\270\211\346\254\241\344\275\234\344\270\232/2022-9-19\347\254\254\344\270\211\346\254\241\344\275\234\344\270\232.sql" new file mode 100644 index 0000000..06122ec --- /dev/null +++ "b/20\347\216\213\344\270\226\350\264\242/2022-9-19\347\254\254\344\270\211\346\254\241\344\275\234\344\270\232/2022-9-19\347\254\254\344\270\211\346\254\241\344\275\234\344\270\232.sql" @@ -0,0 +1,64 @@ +--1. 关羽的银行卡号为"6225547858741263",查询出余额比关羽多的银行卡信息,显示卡号,身份证,姓名,余额。---- +select t.CardNo 卡号,a.AccountCode,a.RealName,t.CardMoney from AccountInfo a +inner join +( +select * from BankCard where CardMoney > ( +select CardMoney from BankCard where CardNo = '6225547858741263') +) t +on t.AccountId = a.AccountId + + +--2. 从所有账户信息中查询出余额最高的交易明细(存钱取钱信息)。 +select top 1 *,(MoneyInBank-MoneyOutBank) 余额 from CardExchange +order by 余额 desc + +--3. 查询有取款记录的银行卡及账户信息,显示卡号,身份证,姓名,余额。 +select t1.CardNo 卡号,a.AccountCode 身份证,a.RealName 姓名, t1.余额 from AccountInfo a +inner join +( +select b.*,t.余额 from BankCard b +inner join +( +select *,(MoneyInBank-MoneyOutBank) 余额 +from CardExchange +where MoneyOutBank != 0 +) t +on b.CardNo = t.CardNo +) t1 +on t1.AccountId = a.AccountId + +--4. 查询出没有存款记录的银行卡及账户信息,显示卡号,身份证,姓名,余额。 +select * from BankCard where CardNo not in +( +select CardNo from CardExchange +) +--5. 关羽的银行卡号为"6225547858741263",查询当天是否有收到转账。 + +if exists( select * from CardTransfer where CardNoIn = '6225547858741263') +print '有收到转账' +else +print'未收到转账' +--6. 查询出交易次数(存款取款操作)最多的银行卡账户信息,显示:卡号,身份证,姓名,余额,交易次数。 + +select top 1 BankCard.CardNo 卡号,AccountCode 身份证,RealName 姓名,CardMoney 余额, +exchangeCount 交易次数 from BankCard +inner join AccountInfo on BankCard.AccountId = AccountInfo.AccountId +inner join +(select CardNo,COUNT(*) exchangeCount from CardExchange group by CardNo) CarcExchageTemp +on BankCard.CardNo = CarcExchageTemp.CardNo +order by exchangeCount desc + +--7. 查询出没有转账交易记录的银行卡账户信息,显示卡号,身份证,姓名,余额-- +select CardNo 卡号,AccountCode 身份证,RealName 姓名,CardMoney 余额 from BankCard +left join AccountInfo on BankCard.AccountId = AccountInfo.AccountId +where BankCard.CardNo not in (select CardNoIn from CardTransfer) +and BankCard.CardNo not in (select CardNoOut from CardTransfer) + + + + + + + + + diff --git "a/20\347\216\213\344\270\226\350\264\242/2022-9-19\347\254\254\344\270\211\346\254\241\344\275\234\344\270\232/2022-9-19\347\254\254\344\270\211\346\254\241\347\254\224\350\256\260.md" "b/20\347\216\213\344\270\226\350\264\242/2022-9-19\347\254\254\344\270\211\346\254\241\344\275\234\344\270\232/2022-9-19\347\254\254\344\270\211\346\254\241\347\254\224\350\256\260.md" new file mode 100644 index 0000000..62ba26a --- /dev/null +++ "b/20\347\216\213\344\270\226\350\264\242/2022-9-19\347\254\254\344\270\211\346\254\241\344\275\234\344\270\232/2022-9-19\347\254\254\344\270\211\346\254\241\347\254\224\350\256\260.md" @@ -0,0 +1,11 @@ + - ROW_NUMBER()函数生成的排序根据排序子句给出**递增连续的序号** +- RANK()函数生成的排序根据排序子句给出**递增的序号,但是存在并列并且跳空** +- DENSE_RANK() 函数生成的排序根据排序子句给出**递增的序号,但是存在并列不跳空** + +```sql +ROW_NUMBER() over(order by 列名 desc)、 +-- select StuName 姓名,ROW_NUMBER() over(order by score desc) +rank() over(order by 列名 desc) +dense_rank() over(order by 列名 desc) +``` + -- Gitee