ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

TSQL查询语句全--(在sql server上的操作记录)

2022-03-03 13:33:23  阅读:257  来源: 互联网

标签:-- 基本工资 server 姓名 sql employee 出生日期 查询 SELECT


0:创建表(同时创建表结构)
create table employee (
编号 int identity(1,1) not null,
姓名 nvarchar(6) not null,身份证号 nchar(18) primary key,职务 nchar(10) not null,
基本工资 money not null check(基本工资>0 and 基本工资<20000) ,出生日期 date not null,
)

1:向employee表中插入一行数据
insert into employee (姓名, 身份证号, 职务, 出生日期, 基本工资)
VALUES ('李六', '111222333444555610', '运维工程师', '1995/10/1', 8500),
('李五', '111222333444555668', '开发工程师', '1995/9/10', 9000)

2:更改employee表中黄蓉的基本工资为11000
update employee SET 基本工资='11000'
WHERE 姓名='黄蓉'

3:删除employee表中杨过的记录
DELETE FROM employee WHERE 姓名='杨过'

4: SELECT 语法结构
SELECT select_list(列名)
[INTO new_table_name]
FROM table_name
[ WHERE search_conditions ]
[GROUP BY group_by_expression]
[HAVING search_conditions]
[ORDER BY order_expression [ASC|DESC] ]

5:查询基本工资为8000~10000的员工所有信息
SELECT * FROM employee
WHERE 基本工资 BETWEEN 8000 AND 10000

6:查询基本工资<10000或>20000的员工所有信息
SELECT * FROM employee
WHERE 基本工资<10000 OR 基本工资>20000

7:查询基本工资为8000、9000和10000的员工所有信息
SELECT * FROM employee WHERE 基本工资 IN (8000,9000,10000)

8:查询身份证号以66开头的员工所有信息
SELECT * FROM employee WHERE 身份证号 LIKE '66%'

9:查询姓杨的运维工程师的信息
SELECT * FROM employee
WHERE 姓名 LIKE '杨%' AND 职务='运维工程师'

10:查询备注不为空的员工所有信息
SELECT * FROM employee WHERE 备注 is not NULL

11:查询employee表中前5行的数据
SELECT top 5 * FROM employee

12:查询employee表中姓名和身份证号两列数据并取上别名
SELECT 姓名 AS name, 身份证号 as idcard FROM employee

13:查询employee表中所有员工信息,按照基本工资从高到低显示查询结果
SELECT * FROM employee ORDER BY 基本工资 DESC

14:查询employee表中员工的所有职务(查询去重)
SELECT DISTINCT 职务 FROM employee

15:查询出生日期最早的前10名员工的姓名
SELECT top 10 姓名 FROM employee ORDER BY 出生日期 asc

16:在employee表中,查询所有员工的姓名、身份证号、职务和基本工资
列出满足身份证号的左起第三位是0、除CTO以外的
姓名字段显示为name
查询结果按照基本工资的由高到低排列:
SELECT 姓名 AS name, 身份证号, 职务, 基本工资
FROM employee
WHERE 身份证号 LIKE '__0%' AND 职务!='CTO'
ORDER BY 基本工资 DESC

17:将employee表中所有员工的姓名、身份证号和职务生成一个新表new01
SELECT 姓名,身份证号,职务 INTO new01 FROM employee

18:将employee表中所有基本工资大于等于15000的员工的姓名、职务和出生日期保存到新表new02(前提:这张新表要提前创建)
INSERT INTO new02 (姓名,职务,出生日期)
SELECT 姓名, 职务, 出生日期
FROM employee
WHERE 基本工资 >= 15000

19:将employee表中所有员工的姓名、职务和出生日期,以及新输入2名员工相关信息,一起保存到新表new02
INSERT INTO new03 (姓名,职务,出生日期)
SELECT '欧阳锋','人事经理','1988-08-08' UNION
SELECT '一灯','财务经理','1977-07-07' UNION
SELECT 姓名,职务,出生日期 FROM employee

20:显示employee表中开发工程师的姓名和基本工资 (cast数据类型转换)
SELECT '开发工程师'+姓名+' 的基本工资是:' + cast(基本工资 as varchar(10)) + '元'
FROM employee WHERE 职务 = '开发工程师'

21:显示距离当前10天之后的日期和时间
Select DateAdd(dd,10,GetDate())

22:显示employee表中所有人的姓名和年龄
SELECT 姓名,DATEDIFF(YY,出生日期,GetDate()) AS 年龄
FROM employee

23:显示employee表中所有90后员工的姓名和出生年份
SELECT 姓名,DATENAME(YEAR,出生日期) AS 出生年份
FROM employee
WHERE 出生日期 BETWEEN '1990-01-01' AND '1999-12-31'

24:查询employee表中每个职务的平均工资
SELECT 职务,AVG(基本工资) AS 职务平均工资
FROM employee
GROUP BY 职务

25:同在一个SELECT语句中,执行顺序:WHERE -> GROUP BY -> HAVING
查询employee表中平均工资小于10000的职务,员工“段誉”不计算在内
SELECT 职务,AVG(基本工资) AS 职务总工资
FROM employee WHERE 姓名 != '段誉'
GROUP BY 职务 HAVING AVG(基本工资) < 10000

26:查询employee表中所有人的平均工资,用CEILING()函数取整(CEILING()函数取大于或等于指定数值表达式的最小整数
)。
SELECT CEILING(AVG(基本工资)) AS 平均工资
FROM employee

27:查询未满30岁的员工的生日和年龄,并计算出距离30岁的天数,用字符串拼接显示结果(分两大步)
一:先执行正确语句
select 姓名,出生日期,DATEDIFF(yy,出生日期,GETDATE()) as 年龄
,DATEDIFF(dd,GETDATE(),dateadd(yy,30,出生日期)) as 距离30岁 from employee
where DATEDIFF(yy,出生日期,GETDATE())<=30

二:对上述语句结果进行字符串的拼接(convert(转换后,源数据,类型)函数和cast(源数据as转换后)函数进行类型转换)
select '员工'+姓名+'的生日是'
+CONVERT(nvarchar(10),出生日期,111)
+',现在年龄是'
+cast(DATEDIFF(yy,出生日期,GETDATE()) as varchar(10))
+'岁,距离三十岁生日还有'
+cast(DATEDIFF(dd,GETDATE(),dateadd(yy,30,出生日期)) as varchar(10))
+'天'
from employee
where DATEDIFF(yy,出生日期,GETDATE())<=30

28:使用T-SQL实现多表查询 。如果一个查询需要对多个表进行操作,就称为联接查询。
1。先建立两张表A和B
create table A ( 姓名 nvarchar(6) not null,学校 nvarchar(10) not null)
create table B ( 姓名 nvarchar(6) not null,职业 nvarchar(10) not null)
2。向表中插入数据
insert into A(姓名,学校)
VALUES ('李寒','北京大学'),('张玉','清华大学'),('刘敏','中国人民大学'),('孙明明','浙江大学')
insert into B(姓名,职业)
VALUES ('王博','工程师'),('张玉','咨询师'),('刘敏','作家'),('张明翰','建筑师')

内联接
在表A和表B中使用内联接查询学生姓名、学校和职业
方式一:在Where子句中指定联接条件(别名设置as可省略)
SELECT A.姓名 姓名A, A.学校 学校A, B.姓名 姓名B, B.职业 职业B
FROM A, B WHERE A.姓名= B.姓名

方式二:在FROM子句中使用INNER JOIN…ON子句
SELECT A.姓名 姓名A, A.学校 学校A, B.姓名 姓名B, B.职业 职业B
FROM A INNER JOIN B ON A.姓名=B.姓名

外连接(左外和右外)
1.左外联接查询
SELECT A.姓名 姓名A, A.学校 学校A, B.姓名 姓名B, B.职业 职业B
FROM A LEFT JOIN B on A.姓名 = B.姓名
2.右外联接查询
SELECT A.姓名 姓名A, A.学校 学校A, B.姓名 姓名B, B.职业 职业B
FROM A RIGHT JOIN B on A.姓名=B.姓名

备注:(左外和右外都是相对LEFT(RIGHT) JOIN的左右位置来说的,记住一个即可)例子:
FROM A LEFT JOIN B on A.姓名 = B.姓名 == FROM B RIGHT JOIN A on A.姓名 = B.姓名

3.完整外联接查询(全连接)
SELECT A.姓名 姓名A, A.学校 学校A, B.姓名 姓名B, B.职业 职业B
FROM A FULL JOIN B on A.姓名=B.姓名

备注:把FULL去掉后,默认使用内连接

29:修改表结构
一:添加列
ALTER TABLE 表名
ADD 列名 数据类型(大小)

二:修改列的数据类型
ALTER TABLE 表名
ALTER COLUMN 列名 数据类型(大小)

三:删除列
ALTER TABLE 表名
DROP COLUMN 列名

30:创建聚集唯一索引,索引名为IX_employee
CREATE UNIQUE CLUSTERED INDEX IX_employee
ON employee(编号)

31:按照指定的索引进行查询
SELECT * FROM employee
WITH (INDEX = IX_employee)
WHERE 编号=3

32:删除索引
DROP INDEX IX_employee ON employee

33:索引分类创建
一:创建普通索引(可以重复)
CREATE INDEX index_name
ON table_name (column_name)
如果您希望以降序索引某个列中的值,您可以在列名称之后添加保留字 DESC
CREATE INDEX index_name
ON table_name (column_name DESC)
假如您希望索引不止一个列,您可以在括号中列出这些列的名称,用逗号隔开
CREATE INDEX index_name
ON table_name (column_name,column_name)

34:视图
一:创建视图
CREATE VIEW 视图名 AS
SELECT 列名
FROM 表名
WHERE 条件

二:查询视图
select * from 视图名

三:删除视图
DROP VIEW 视图名

35:存储过程:是一组预编译的T-SQL语句
一:执行常用的系统存储过程
EXEC sp_databases --列出当前系统中的数据库
EXEC sp_renamedb 'MyBank','Bank' --改变数据库名称(mybank改名为bank)
USE MySchool --使用myschool数据
GO
EXEC sp_tables --当前数据库中可查询对象的列表
EXEC sp_columns employee --查看表employee中列的信息
EXEC sp_help employee --查看表employee的所有信息
EXEC sp_helpconstraint Student --查看表Student的约束
EXEC sp_helptext view_Student_Result --查看视图的语句文本
EXEC sp_stored_procedures --返回当前数据库的存储过程列表

二:创建存储过程
create proc abc (创建存储过程名)
as
declare @subjectNo int (声明变量)
select @subjectNo=employee.编号 from employee (给变量赋值)
where 姓名='郭靖'

declare @avg decimal(10,2) (声明变量)
select @avg=avg(基本工资) from employee

print '郭靖的ID是:'+convert(varchar(3),@subjectNo) (使用字符串打印输出)
print '基本工资是:'+convert(varchar(12),@avg)

三:调用存储过程abc
exec abc

36:触发器概念
是在对表进行增删改操作时自动执行的存储过程,是一种高级约束
两张表:inserted表和deleted表 是虚拟表,由系统管理,存储在内存而不是数据库中,因此,不允许用户直接对其修改
inserted表(保存新数据) deleted表(保存原始数据)
执行的时间:新数据已经保存了,然后触发器对其进行验证,若发现有错误就回滚数据。
CREATE TRIGGER trigger_name
ON table_name
[WITH ENCRYPTION] (加密,防止其作为sql server复制的一部分进行发布)
FOR {[DELETE, INSERT, UPDATE]}
AS SQL语句

一:创建名为tri的触发器,禁止对emp表进行删除的操作,同时打印出'禁止修改'字段。
create trigger tri
on employee
for delete
as
rollback transaction
print '禁止修改'

二:进行验证
delete FROM employee where 姓名='李三'

三:删除名为tri的触发器
drop trigger tri

37:事务
一:开始事务
BEGIN TRANSACTION
二:提交事务
COMMIT TRANSACTION
三:回滚(撤销)事务
ROLLBACK TRANSACTION

 

标签:--,基本工资,server,姓名,sql,employee,出生日期,查询,SELECT
来源: https://www.cnblogs.com/wang-a/p/15959339.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有