T-SQL

SQL Server T-SQL  (Stuctured Query Language)

T – SQL 运算符: +, -, * ,/,%

T – SQL 赋值运算符:=   例如:Name = ‘王华’

T – SQL 比较运算符:= 等于 例如:age = 23       >  大于  例如:price > 100

< 小于 <> 不等于    >= 大于等于 <= 小于等于 != 不等于(非SQL-92标准)

T – SQL 逻辑运算符:AND 与(并且), OR 或(或者), NOT 非(取反)

一、使用INSERT插入数据  (增)

1.一次插入一行数据   INTO解释:(到…里;深入…之中;成为…状况;进入到…之内)

语法:INSERT [INTO] 表名 [(列名列表)] VALUSE (值列表)

如:INSERT INTO Student (Name,Address,Grade,Email,Sex)

VALUSE (‘张三’,’湖北’,’25’,’[email protected]’,DEFAULT); DEFAULT(默认值)

2.一次插入多行数据

(1)(通过INSERT SELECT 语句将现有表中的数据添加到已存在的表中)

如:INSERT INTO Address (SName,Phone,Address,Email)(表必须预先存在)

SELECT StudentName,Phone,Address,Email

FROM Student

(2)(通过SELECT INTO 语句将现有表中的数据添加到新表中)

如:SELECT IDENTITY (int,1,1) AS StudentNo Student.StudentName,Student.Address,Student.Email

INTO AddressList (此表不能预先存在)

FROM Student

插入自增列(标识列)

语法:SELECT IDENTITY(数据类型,标识种子,标识增长量) AS 列名

INTO 新表

FROM 原始表

(3)(通过UNION关键字合并数据进行插入)

如:INSERT Result(表名)(StudentNo,SubjectId,StudentResult,ExamDate)

SELECT ‘S120090201‘,1,80,‘2009-9-3‘ UNION

SELECT ‘S120090202‘,2,60,‘2009-9-3‘

二、(1)使用DELETE 删除数据 (删出多条记录,WHERE 不带条件)(删)

语法:DELETE [FROM] 表名 [WHERE <删除条件>]

如:DELETE FROM Student  (DELECT 后面不能出现列名,它删除是删除整条记录)

WHERE StudentNo = ‘S1220015’

(2) 使用TRUNCATE TABLE 删除数据 (删除整表数据)(删)

说明:(删除整表记录,比DELETE执行速度块,它会删除表中的所有行(所有记录)。但表结构、列、约束、索引等不会被改动,而且删除后标识列会重新编号。缺点:使用它删除数据后,不能恢复还原。)

三、使用UPDATE 更新数据 (改)

语法:UPDATE 表名 SET 列名 = 更新值 [WHERE 更新条件]

如:UPDATE Student SET sex = 0 (表中Sex列都将被更新)

如:UPDATE Student SET Scores = Scores + 5

WHERE Scores <= 95  (表中条件满足的Scores列将被更新)

判断条件是否为空: WHERE Email IS NULL (如果等空条件将满足)

四、使用SELECT 语句进行查询(查)

说明:查询时,可以在.sql文件开头加入“USE <数据库名称>”

语法:SELECT <列名>

FROM <表名>

WHERE <查询条件表达式>

[ORDER BY <排序的列名>] ASC(升序) 或 DESC(降序) ,默认为(升序)。

1.查询所有的数据行和列      (*)表示所有列

SELECT * FROM Student

2.查询部分行或列

SELECT SCode,Sname,Saddress

FROM Student

WHERE Saddress = ‘湖北’

3.在查询中使用列的别名

SELECT Scode AS 学生编号,Sname AS 学生姓名,Saddress AS 学生地址

FROM Student

WHERE Saddress <> ‘湖北’

合并列:SELECT StudentName+’,’+Sex AS 姓名性别 (需要同类型)

FROM Student

使用“=”命名:

SELECT 姓名性别 = StudentName+’,’+Sex

FROM Student

4.查询空值

SELECT StudentName FROM Student WHERE Phone IS NULL (条件为空满足)

SELECT StudentName FROM Student WHERE Phone IS NOT NULL (不为空)

5.在查询中使用常量列

SELECT 姓名 = StudentName, 地址 = Address, ‘北大青鸟‘ AS 学校名称

FROM Student

6.查询返回限制行数

(1)SELECT TOP 5 StudentName, BornDate AS 生日

FROM Student WHERE Sex = 0  (使用关键字 TOP + 返回个数)

(2)SELECT TOP 20 PERCENT StudentName, BornDate AS 生日

FROM Student WHERE Sex = 0  (使用TOP + 数字 + PERCENT(表示百分之))

7.如何使用 ORDER BY

SELECT TOP 1 StudentName,GradeId

FROM Student

ORDER BY BornDate DESC

测试   SELECT  StudentResult/2 AS 计算的成绩,StudentNo,StudentResult,*

FROM Result   (可以任意添加多少的列)

模糊查询

1.通配符

_   一个字符             A LIKE ‘C_’ 则符合条件的如:CS,CB,CA 等。

%   任意长度的字符串     B LIKE ‘CO%’ 则符合条件的如:Coabc,Coxyz,等。

[]  括号中所指定范围的一个字符  C LIKE ‘a0[1-5]’,则符合条件的如:a01,a04等

[^] 不在括号中所指定范围内的任意一个字符 D LIKE ‘a0[^1-5]’ 如:a06,a07等。

2.使用LIKE进行模糊查询

SELECT * FROM Student WHERE StudentName LIKE ‘李%’ 或者’李__’

结果:将查询出姓为李,名为两个或一个字符的学生信息

SELECT * FROM Student WHERE Address LIKE ‘%江%’

结果:将查询出地址为长江路的的学生信息

select * FROM Result WHERE StudentResult LIKE ‘7[1-8]‘

结果:71-78,包括71和78.

select * FROM Result WHERE StudentResult LIKE ‘7[^1-8]‘

结果:不包括71-78,包括70和79

3.使用BETWEEN 在某个范围内进行查询 (包头包围的取值)

用于数字,并且前面的数字一定比后面的大,否则无结果.

SELECT * FROM Result WHERE StudentResult BETWEEN 60 AND 80

结果:包括60和80,及60到80之间的数字

SELECT * FROM Result WHERE StudentResult NOT BETWEEN 60 AND 80

结果:不包括60和80,及不包括60到80之间的数字

4.使用IN在列举值内进行查询

用于指定的非数字范围取值.

SELECT StudentName,Sex FROM Student WHERE Address IN (‘长江路’,’湖北’)

结果:查询出地址为长江路和湖北的学生姓名及性别。

SELECT StudentName FROM Student WHERE Address NOT IN (‘长江路’,’湖北’) 结果:查询出地址不为长江路和湖北的学生姓名。

T-SQL中的聚合函数

SUM()  返回表达式中所有数值的总和,SUM()只能用于数字类型的列。

SELECT SUM(StudentResult) AS 学号为23的学生总分 FROM Result WHERE StudentNo = ‘23’

AVG() 返回表达式中所有数值的平均值,AVG()也只能用于数字类型的列。

SELECT SUM(StudentResult) AS 学号为23的学生平均分 FROM Result WHERE StudentResult >= 60

MAX()和MIN()

MAX()返回表达式中最大的值,MIN()……最小的值,它们都可以用于数字型、字符型以及日期/时间类型的列。

SELECT AVG(StudentResult)AS 平均分,MAX(StudentResult) AS 最高分,

MIN(StudentResult)AS 最低分 FROM Result WHERE StudentResult >= 60

COUNT() 返回提供的组或记录集中的个数,COUNT()可以用于数字和字符类型的列。

SELECT COUNT(*) FROM Result WHERE StudentResult >= 60  (*)将统计所有行

SELECT COUNT(StudentResult) FROM Result   (如果为空(NULL)将不被计算)

使用GROUP BY进行分组查询

SELECT GradeId, AVG(StudentResult)

FROM Result

GROUP BY GradeId

  1. 查询男女学生的人数各有多少人

SELECT 人数 = COUNT(*),Sex AS 性别

FROM Student

GROUP BY Sex

  1. 查询每个年级的总人数

SELECT COUNT(*) AS 人数,GradeId AS 年纪

FROM Student

GROUP BY GradeId

  1. 查询每个科目的平均分,并按照有高到底的顺序排列显示

SELECT SubjectId AS 科目, AVG(StudentResult) AS 平均分

FROM Result

GROUP BY SubjectId

ORDER BY AVG(StudentResult) DESC

  1. 多列分组查询

SELECT COUNT(*) AS 人数, GradeId AS 年级, Sex AS 性别

FROM Student

GROUP BY GradeId,Sex

ORDER BY GradeId

使用HAVING子句进行分组筛选

注意:SELECT 后面除聚合函数,后面的内容在GROUP后面一定要出现

  1. 查询年级总人数超过5的年级

SELECT COUNT(*) AS 人数,GradeId AS 年级

FROM Student

GROUP BY GradeId

HAVING COUNT(*) > 5

  1. 查询平均分及格的课程信息

SELECT  SubjectId AS 课程编号,AVG(StudentResult) AS 平均分

FROM Result

WHERE StudentResult >= 60

GROUP BY SubjectId

HAVING AVG(StudentResult) >= 60

ORDER BY AVG(StudentResult) DESC

  1. 查询门课程及格总人数和及格学生的平均分

SELECT COUNT(*) AS 人数, AVG(StudentResult) AS 平均分, SubjectId AS 课程

FROM Result

WHERE StudentResult >= 60

GROUP BY SubjectId

  1. 查询没门课程及格总人数和及格平均分在80分以上的记录

SELECT COUNT(*) AS 人数, AVG(StudentResult) AS 平均分, SubjectId AS 课程

FROM Result

WHERE StudentResult >= 60

GROUP BY SubjectId

HAVING AVG(StudentResult) >= 80

  1. 在按照部门分类的员工表中,查询“有多个员工的工资不低于2000的部门编号”

SELECT 部门编号,COUNT(*) FROM 员工信息表

WHERE 工资 >= 2000

GROUP BY 部门编号

HAVING COUNT(*) > 1

多表联接接查询

一、内连接查询

1.在WHERE子句中指定联接条件

SELECT StudentName,StudentResult

FROM Student,Result

WHERE Student.StudentNo = Result.StudentNo

2.在FROM子句中使用INNER JOIN…ON

SELECT S.StudentName,R.StudentResult

FROM Student AS S

INNER JOIN ResultAS R ON (S.StudentNo = R.StudentNo)

例1:SELECT R.SubjectId, S.StudentName, R.StudentResult

FROM Student AS S

INNER JOIN ResultAS R ON(S.StudentNo = R.StudentNo)

WHERE R.StudentResult >=60 AND R.SubjectId = 18

例1中,查询将返回科目编号为18的及格学生的姓名和分数

列2:(研究)SELECT R.SubjectId, S.StudentName, R.StudentResult

FROM Student AS S

INNER JOIN ResultAS R ON(S.StudentNo = R.StudentNo)

GROUP BY R.SubjectId,S.StudentName,R.StudentResult

三个表之间联接查询

SELECT S.StudentName AS 姓名, SU.SubjectId AS 科目, R.StudentResult

FROM Student AS S

INNER JOIN ResultAS R ON (S.StudentNo = R.StudentNo)

INNER JOIN Subject SU ON (SU.SubjectId = R.SubjectId)

二、外联接查询

  1. 左外联接查询 (查询左表全部内容,右表不满足为空NULL) OUTER:外面的(可加可不加)

SELECT S.StudentName AS 姓名,R.SubjectId AS 科目, R.StudentResult

FROM Student AS S

LEFT OUTER JOIN ResultAS R ON (S.StudentNo = R.StudentNo)

  1. 右外联接查询(查询右表全部内容,左表不满足为空NULL)

SELECT S.StudentName AS 姓名,R.SubjectId AS 科目, R.StudentResult

FROM Student AS S

RIGHT OUTER JOIN ResultAS R ON (S.StudentNo = R.StudentNo)

时间: 2024-10-22 16:26:44

T-SQL的相关文章

SQL查询字段添加括号报错:Operand should contain 1 column(s)

SQL语句:查询连个字段的信息 SELECT (menu_id,menu_captions) FROM bsdb.menulist a WHERE a.menu_id like ('2_'); 然后,因为这是在存储过程中的一个语句所以,在执行存储过程的时候编译不会报错,但是执行的时候却汇报错:Operand should contain 1 column(s):原因不好解释: 下面是官方发解释(MYSQL):https://dev.mysql.com/doc/refman/5.0/en/row-

SQL Server 2008的MSSQLSERVER 请求失败或服务未及时响应

我的是SQL server 2008R2, 以前可以正常的启动SQL server(SQLEXPRESS).SQL server(MSSQLSERVER),有几天没有打开了,就在昨天 开机之后就无法启动MSSQLSERVER了,提示的信息如下图: 快速解决办法如下: 第一步:打开事件查看器,查看windows日志,点击应用程序,查看windows错误日志 http://product.pconline.com.cn/itbk/software/win8/1211/3060037.html 第二步

【Kettle】4、SQL SERVER到SQL SERVER数据转换抽取实例

1.系统版本信息 System:Windows旗舰版 Service Pack1 Kettle版本:6.1.0.1-196 JDK版本:1.8.0_72 2.连接数据库 本次实例连接数据库时使用全局变量. 2.1 创建新转换:spoon启动后,点击Ctrl+N创建新转换 2.2 在新转换界面中,右键点击DB连接,系统会弹出[数据库连接]界面. windows系统环境下,可用${}获取变量的内容. 说明: 连接名称:配置数据源使用名称.(必填) 主机名称:数据库主机IP地址,此处演示使用本地IP(

sql常用格式化函数及字符串函数

一.常用格式化函数 1.日期转字符串 select to_char(current_timestamp, 'YYYY-MM-DD HH24:MI:SS') //2017-09-18 22:41:50 YYYY:年(4和更多位) MM:月份号(01-12) DD:一个月里的日(01-31) HH24:一天的小时数(00-23) MI:分钟(00-59) SS:秒(00-59) 2.字符串转日期 select to_date('2017-09-18','YYYY-MM-DD') //2017-09-

Bootstrap + AngularJS+ Ashx + SQL Server/MySQL

去年年底12月,为适应移动端浏览需求,花了1个月时间学习Bootstrap,并将公司ASP网站重构成ASP.NET. 当时采取的网站架构: Bootstrap + jQuery + Ashx + SQL Server 时间紧,没人带,只能硬着头皮,最后如期完成,但是也遗留了几个问题. 问题: 1.页面查询条件太复杂,太多的checkbox,jQuery操作DOM虽然方便,但是组合成json提交给后端还是比较麻烦,有没有天然支持json的前端框架或者脚本语言? html控件做的任何修改,都自动保存

Spark SQL 之 Join 实现

原文地址:Spark SQL 之 Join 实现 Spark SQL 之 Join 实现 涂小刚 2017-07-19 217标签: spark , 数据库 Join作为SQL中一个重要语法特性,几乎所有稍微复杂一点的数据分析场景都离不开Join,如今Spark SQL(Dataset/DataFrame)已经成为Spark应用程序开发的主流,作为开发者,我们有必要了解Join在Spark中是如何组织运行的. SparkSQL总体流程介绍 在阐述Join实现之前,我们首先简单介绍SparkSQL

PL/SQL developer 连接oracle数据库报错“initialization error could not load oci.dll”

声明:PL/SQL 版本:PL/SQL Developer 9.0.6 (http://files.allroundautomations.com/plsqldev906.exe) 报错提示如图: 原因:PL/SQL只对32位OS进行支持,解决方法是额外加载一个oci.dll文件 解决办法:1.下载OCI.DLL相关库文件.地址: (需注册Oracle账号) http://www.oracle.com/technetwork/topics/winsoft-085727.html ----->  

WAF——针对Web应用发起的攻击,包括但不限于以下攻击类型:SQL注入、XSS跨站、Webshell上传、命令注入、非法HTTP协议请求、非授权文件访问等

核心概念 WAF Web应用防火墙(Web Application Firewall),简称WAF. Web攻击 针对Web应用发起的攻击,包括但不限于以下攻击类型:SQL注入.XSS跨站.Webshell上传.命令注入.非法HTTP协议请求.非授权文件访问等.

sql

use simulation; # 多条SQL语句必须以分号分隔 show DATABASES ; show TABLES ; show COLUMNS from customers; # SQL语句不区分大小写 SHOW COLUMNS FROM products; SHOW COLUMNS FROM vendors; SHOW COLUMNS FROM orders; SHOW COLUMNS FROM productnotes; SHOW COLUMNS FROM orderitems;

MyBatis学习(四)XML配置文件之SQL映射的XML文件

SQL映射文件常用的元素: 1.select 查询语句是MyBatis最常用的语句之一. 执行简单查询的select元素是非常简单的: <select id="selectUser" parameterType="int" resultType="hashmap"> SELECT * FROM PERSON WHERE ID = #{id} </select> 这个语句被称作selectUser,接受一个int类型的参数,