SQL:数据库查询语言的核心技术
SQL:数据库查询语言的核心技术
一、SQL 基础概念
定义与发展历程
- 结构化查询语言(Structured Query Language)
- 从 1970 年代 IBM 研发到 ANSI 标准化
核心功能分类
- 数据定义语言(DDL):CREATE, ALTER, DROP
- 数据操作语言(DML):INSERT, UPDATE, DELETE
- 数据查询语言(DQL):SELECT
- 数据控制语言(DCL):GRANT, REVOKE
命令
INSERT INTO [dbo].[葛大侠公司]
([姓名]
,[性别]
,[籍贯]
,[出生日期]
,[身份证号码]
,[工资]
,[电话号码]
,[职位]
,[备注])
VALUES
(<姓名, nvarchar(50),>
,<性别, nvarchar(50),>
,<籍贯, nvarchar(50),>
,<出生日期, nvarchar(50),>
,<身份证号码, varchar(50),>
,<工资, money,>
,<电话号码, nvarchar(11),>
,<职位, nvarchar(50),>
,<备注, nvarchar(2000),>)
GO
新建表
USE [sjh]
GO
###############################################################################
SELECT [编号]
,[姓名]
,[性别]
,[籍贯]
,[出生日期]
,[身份证号码]
,[工资]
,[电话号码]
,[职位]
,[备注]
FROM [dbo].[青大侠公司]
GO
查询
###############################################################################
UPDATE [dbo].[青大侠公司]
SET [姓名] = <姓名, nvarchar(50),>
,[性别] = <性别, nvarchar(50),>
,[籍贯] = <籍贯, nvarchar(50),>
,[出生日期] = <出生日期, nvarchar(50),>
,[身份证号码] = <身份证号码, varchar(50),>
,[工资] = <工资, money,>
,[电话号码] = <电话号码, nvarchar(11),>
,[职位] = <职位, nvarchar(50),>
,[备注] = <备注, nvarchar(2000),>
WHERE <搜索条件,,>
GO
修改
###############################################################################
SELECT *
FROM [dbo].[青大侠公司]
where 姓名 like '李%' AND [工资] >= 10000
查询公司里所有姓*的并且工资高于10000的人员的姓名
###############################################################################
UPDATE [dbo].[青大侠公司]
SET [工资]= 6000
WHERE [性别]= '女'
GO
将所有女员工的工资调整到6000
###############################################################################
UPDATE [dbo].[青大侠公司]
SET [职位]= 'java工程师'
WHERE [姓名]= '张泽宇'
GO
将张泽宇的职位调整为java工程师
###############################################################################
SELECT [工资],[姓名]
FROM [dbo].[青大侠公司]
WHERE [身份证号码] LIKE '42%'
查询身份证号前两位为42的员工的姓名和工资
SELECT*
FROM [dbo].[青大侠公司]
GO
查询所有列
###############################################################################
SELECT [姓名],[职位],[工资]
FROM [dbo].[青大侠公司]
GO
查询特定列
###############################################################################
SELECT [姓名]
FROM [dbo].[青大侠公司]
WHERE [职位]= 'java工程师'
GO
条件查询
###############################################################################
SELECT*
FROM [dbo].[青大侠公司]
WHERE [工资]
BETWEEN 8000 AND 100000
GO
查询表中工资 8000到 100000
###############################################################################
SELECT*
FROM [dbo].[青大侠公司]
WHERE [工资]<10000 OR [工资]>15000
查询表中工资低于10000或高于15000
###############################################################################
SELECT*
FROM [dbo].[青大侠公司]
WHERE [工资] IN (6000,10000,40000)
GO
查询表中工资等于 6000 10000 40000的
###############################################################################
SELECT*
FROM [dbo].[青大侠公司]
WHERE [身份证号码]LIKE '42%'
GO
查询身份证号42开头的
###############################################################################
SELECT*
FROM [dbo].[青大侠公司]
WHERE [姓名] LIKE '张%'AND [职位]= 'java工程师'
GO
查询表中姓张的java工程师
###############################################################################
SELECT*
FROM [dbo].[青大侠公司]
WHERE [备注] is not NULL
GO
查询表中填有备注的列
###############################################################################
SELECT TOP 5 *
FROM [dbo].[青大侠公司]
GO
查询前五行查询数据
###############################################################################
SELECT [姓名] AS nama,[身份证号码] AS idcard
FROM [dbo].[青大侠公司]
GO
改变查询结果名称
###############################################################################
SELECT*
FROM [dbo].[青大侠公司]
ORDER BY [工资] DESC
GO
SELECT*
FROM [dbo].[青大侠公司]
ORDER BY [工资] ASC
GO
查询结果排序
注:ASC表示降序 DESC表示升序
###############################################################################
SELECT DISTINCT [职位]
FROM [dbo].[青大侠公司]
GO
查询结果去重
###############################################################################
SELECT [姓名] AS name,[身份证号码],[职位],[工资]
FROM [dbo].[青大侠公司]
WHERE [身份证号码] LIKE '__0%' AND 职位 != '总经理'
ORDER BY 工资 DESC
GO
综合查询
###############################################################################
SELECT[姓名],[身份证号码],[职位] INTO [副公司]
FROM [dbo].[青大侠公司]
使用SELECT生成新数据
###############################################################################
INSERT INTO 极速 (姓名,职位,出生日期)
SELECT [姓名],[职位],[出生日期]
FROM [dbo].[葛大侠公司]
WHERE [工资]>=15000
GO
INSERT使用SEELECT
###############################################################################
INSERT INTO TOC (姓名,职位,出生日期)
SELECT '大傻','经理','1988/11/11' UNION
SELECT '2傻','经理','1988/11/11' UNION
SELECT 姓名,职位,出生日期
FROM [dbo].[青大侠公司]
GO
使用UNION关键字
###############################################################################
SELECT'运维'+[姓名]+'的基本工资是:'+ CAST(工资 as varchar (10))+'元'
FROM [dbo].[青大侠公司]
WHERE [职位]='运维'
GO
查询表中运维的姓名和工资和时间
###############################################################################
SELECT DATEADD (DD,10,GETDATE())
查询10天之后的日期和时间
###############################################################################
SELECT [姓名],DATEDIFF (YYYY,出生日期, GETDATE()) AS 年龄
FROM [dbo].[青大侠公司]
查询表中所有人的年龄和姓名
YYYY-MM-DD 年-月-日
HH-MM-SS 时-分-秒
###############################################################################
SELECT [姓名],DATENAME (YYYY,出生日期) AS 出生年份
FROM [dbo].[青大侠公司]
WHERE 出生日期 BETWEEN '1990-01-01' AND '1999-12-31'
查看表中90后员工姓名和出生年份
###############################################################################
SELECT SUM (工资) AS 总工资
FROM [dbo].[青大侠公司]
查询表里总工资
###############################################################################
SELECT MAX (工资) AS 最高工资,MIN (工资) AS 最低工资
FROM [dbo].[青大侠公司]
查询表中最低工资和最低的工资
###############################################################################
SELECT COUNT (*) AS 总行数
FROM [dbo].[青大侠公司]
查询表中总行数
###############################################################################
SELECT COUNT (出生日期) AS'90后人数'
FROM [dbo].[青大侠公司]
WHERE [出生日期]>='1990-01-01'
查询表中90后员工人数
###############################################################################
SELECT [职位], AVG(工资) AS 职务平均工资
FROM [dbo].[青大侠公司]
GROUP BY [职位]
查询表中每个职位的基本工资
###############################################################################
SELECT [职位], AVG(工资) AS 职务平均工资
FROM [dbo].[青大侠公司]
GROUP BY [职位]
HAVING AVG(工资)<10000
查询表中职务平均小于10000的
###############################################################################
SELECT [职位], AVG(工资) AS 职务平均工资
FROM [dbo].[青大侠公司]
WHERE [姓名]!='刘婉清'
GROUP BY [职位]
HAVING AVG(工资)<10000
查询表中职务平均小于10000的 把刘琬清排除在外
###############################################################################
SELECT 姓名,出生日期,DATEDIFF(YYYY,出生日期,GETDATE()) AS 年龄,DATEDIFF(DD,GETDATE(),DATEADD(YYYY,30,出生日期))AS 距离30岁天数
FROM [dbo].[青大侠公司]
WHERE DATEDIFF(YYYY,出生日期,GETDATE())<=30
ORDER BY 出生日期
查询表中未满30岁的员工年龄 并计算距离30岁天有多少天
###############################################################################
SELECT'员工'+[姓名]+'的生日'+CONVERT(varchar(10),出生日期,111)+',现在的年龄是'+CAST(DATEDIFF(YYYY,出生日期,GETDATE()) AS varchar(10))+'岁'
+'距离30岁生日还有'+ CAST(DATEDIFF (DD,GETDATE(),DATEADD (YYYY,30,出生日期)) AS varchar(10))+'天'
FROM [dbo].[青大侠公司]
WHERE DATEDIFF (YYYY,出生日期,GETDATE()) <=30
ORDER BY 出生日期
查询表中未满30岁的员工年龄 并计算距离30岁天有多少天
##############################################################################
--内#联接
select A.姓名,A.学校,B.姓名,B.职业
from A,B
where A.姓名=B.姓名
--或者
select A.姓名,A.学校,B.姓名,B.职业
from A inner join B on A.姓名=B.姓名
###############################################################################
--外联接
--左外联接
select A.姓名,A.学校,B.姓名,B.职业
from A left join B on A.姓名=B.姓名
--右外联接
select A.姓名,A.学校,B.姓名,B.职业
from A right join B on A.姓名=B.姓名
--完整外联接
select A.姓名,A.学校,B.姓名,B.职业
from A full join B on A.姓名=B.姓名
###############################################################################
提醒 写的时候要记得检查标点符号和大小写