SQL Server之 (三) 分组 类型转换函数 插入多条数据 字符串函数

SQL Server之 (三)  分组 类型转换函数  插入多条数据  字符串函数

自己学习笔记,转载请注明出处,谢谢!---酸菜

1.SQL 数据分组----Group by /Having 

①有一学生信息表:StuID/StuName/StuAge/StuGender/StuClassID;

求每个班级的ID和对应人数:select StuClassID 班级ID,count(*) 班级人数  from StuInfo group by StuClassID ;

求所有同学中男女同学对应人数:select StuGender 性别, count(*) 人数 from StuInfo group by StuGender ;

求每个班级ID对应每个班级的男同学人数: select StuClass 班级, count(*) 男同学人数 from StuInfo where StuGender=‘男‘ group by StuclassID ;

执行顺序是:

select StuClass 班级, count(*) 男同学人数-------------------4

from StuInfo--------------------1

where StuGender=‘男‘-------------------2

group by StuclassID ------------------3

②当使用了分组语句(group by )/聚合函数时,在select 查询中不能再包含其他列名,只能放到聚合函数里才能出现;

where 和 having 的区别:

where:对没有分组前的每列数据筛选,后可跟任何列且不可跟聚合函数;

having:对分组后的每一组数据进行筛选,后只可跟分组列/聚合函数;

执行顺序:

select StuClass 班级, count(*) 男同学人数------------------5

from StuInfo--------------------1

where StuGender=‘男‘-------------------2

group by StuclassID ------------------3

having 男同学人数>2 -----------------错误写法,因为还未重命名;

having count(*)>2 ------------------4

2.SQL 处理顺序分析

①from

②on

③join

④where

⑤group by

⑥with cube/with rollup

⑦having

⑧select

⑨distinct

⑩order by

?top

3.类型转换函数

Cast(表达式 as 数据类型 )

convert(数据类型,表达式 )

select ‘您班级编号是:‘ + convert(char(1),1)

select 100.0 + cast(int,‘100‘)

4.联合结果集union (集合运算符)

union和union all 都能进行联合,区别:union 可以联合去除重复且重新排序; union all 不会去除重复且不会排序;

大多数情况下,联合时候不需要去除重复,同时要保持原有数据的顺序,一般建议用union  all

union因为要重复扫描,所以效率会很低;

select  stuName,stuAge,stuID from studentInfo

union (all)

select techName,techAge ,techID from teacherInfo

可使用union向表中插入多条数据,且union也会排重

5.备份数据

select * from StudentInfo

select * into StudentInfo20170404BackUp from StudentInfo

将表StudentInfo表的结构和表中数据备份到 StudentInfo20170404BackUp中,且表StudentInfo20170404BackUp是在执行select  into 语句时候创建的,但原表的约束不会被备份过去;

所以select into 语句不能重复执行,因为每次执行都会创建表

原表的结构包括自增列都会在备份表创建,但是原表的约束不会出现在备份表中;

只取表结构不取值: select top 0 * into backupTable from table

6.字符串函数

①len() 计算字符个数,不分中英文,只数字符个数;

print  len(‘Hi~最近好么?‘)   8

②datalength()  返回所占用字节的个数,这个不是字符串函数;

print  datalength(‘Hi~最近好么?‘)   12个,中文两个字节,英文一个自己

print  datalength(N‘Hi~最近好么?‘)  所有都是取Unicode方式,都按2个字节算

③upper 转大写/lower 转小写

print upper(‘Hello,How are you?‘)

print lower(‘Hello,How are you?‘)

④ltrim 去左端空格/rtrim 去掉右端空格 /ltrim(rtirm()) 去掉两端空格
    ⑤字符串截取函数

<1> left() 从左数开始截取:   print left(‘中华人民共和国‘,2)   中华

<2> right()  从右数开始截取: print right(‘中华人民共和国‘,2)   和国

<3> substring()    print substring(‘中华人民共和国‘,1,3)   从第一个位置开始,截取3个:中华人

print substring(‘中华人民共和国‘,-2,3)  空

7.日期和时间函数

①获取当前日期和时间:  getdate()/sysdatetime()(精度相对更高)

②在某一时间再加:dateadd(datepart,num,date)  dateadd(day/month/year/minute/second/hour,200,getdate())

③两个日期差:datediff(datepart,date1,date2)  date1<date2=正数,date1>date2=负数

④获取日期的某部分的值:datepart(year/month/day/hour/minute/second,getdate())  返回int 类型;

时间: 2024-10-24 10:12:43

SQL Server之 (三) 分组 类型转换函数 插入多条数据 字符串函数的相关文章

关于sql server远程访问Oracle数据库 OpenQuery查询返回多条数据的问题

在Sql Server远程访问Oracle 中的数据库表时: 远程语法通常为: select * from OpenQuery(Oracle链接服务器名称,‘查询语句’) eg: select * from OPENQUERY(QTX,'select * from student') 有些情况下只会返回student表一条数据 第一条 解决方法:数据源ODBC中 选择系统DNS 时,新建系统数据源 选择的对应驱动应该为Oracle Instant Client Dricver  这个驱动需要安装

PHP MySQL 插入多条数据

PHP MySQL 插入多条数据 使用 MySQLi 和 PDO 向 MySQL 插入多条数据 mysqli_multi_query() 函数可用来执行多条SQL语句. 以下实例向 "MyGuests" 表添加了三条新的记录: 实例 (MySQLi - 面向对象) <?php$servername = "localhost";$username = "username";$password = "password";$d

SQL Server 2008空间数据应用系列四:基础空间对象与函数应用

原文:SQL Server 2008空间数据应用系列四:基础空间对象与函数应用 友情提示,您阅读本篇博文的先决条件如下: 1.本文示例基于Microsoft SQL Server 2008 R2调测. 2.具备 Transact-SQL 编程经验和使用 SQL Server Management Studio 的经验. 3.熟悉或了解Microsoft SQL Server 2008中的空间数据类型. 4.具备相应(比如OGC)的GIS专业理论知识. 5.其他相关知识. SQL Server 2

SQL SERVER 使用BULK Insert将txt文件中的数据批量插入表中(1)

1/首先建立数据表 CREATE TABLE BasicMsg( RecvTime FLOAT NOT NULL , --接收时间,不存在时间相同的数据 AA INT NOT NULL, --24位地址码 . FlightID Varchar(10) NULL, --航班号) 2/ 建立存储过程 USE DF17DataProIF EXISTS (SELECT * FROM SYS.PROCEDURES WHERE OBJECT_ID = OBJECT_ID(N'[DBO].[BulkDataP

Sql Server 在已知表中插入、删除、修改某一列操作

--1.向已有表中增加一列 ALTER TABLE TableName ADD ColumnName VARCHAR(20) NULL --2.删除表中的某一列 ALTER TABLE TableName DROP COLUMN ColumnName --3.修改某一列的数据类型 ALTER TABLE TableName ALTER COLUMN ColumnName INT 2.查询当年或者当月的数据 1.查询当年的数据 SELECT * FROM UserInfo WHERE YEAR(R

SQL中一次插入多条数据

SQL中insert一次可以插入一条数据,我们有三种方法可以一次性插入多条数据. 1. 语法:select 字段列表 into 新表 from 源表 注意事项:此种方法新表是系统自动创建,语句执行前不可以存在新表,并且新表只能保留源表的标识列特性,其他约束不能保留. 若只需要源表的数据结构,我们可以在语句中添加(top 0) 2. 语法:insert into 目的表 select 字段列表 from 源表 注意事项:此种方法目的表必须在语句执行前存在,并且每一列要与源表对应. 在此处还有一些有

PL/SQL中如何让程序每隔几秒插入一条数据

在编写ORACLE PL/SQL中,如果需要程序执行中暂停几秒钟再继续执行,可以通过oracle内置的dbms_lock.sleep来实现,不过dbms_lock包需要用户自己安装. [[email protected] ~]# su - oracle [[email protected] ~]$ sqlplus / as sysdba SQL*Plus: Release 11.2.0.4.0 Production on Mon May 25 16:36:12 2015 Copyright (c

sql插入多条数据的sql语句

sql插入多条数据的sql语句 有三种方法:1.InSert Into <表名>(列名)Select <列名>From <源表名>如:INSERT INTO TongXunLu (姓名,电话,电子邮件) SELECT SName,SAddress,SEmailFROM Students 这种方法需要先建好新表.2.Select (列名)Into <表名>From <源表名>如:SELECT Students.SName,Students.SAdd

SQL Server 触发器例题: --次性删除course表数据,使用触发器替换删除操作,先删除外键表相关数据,再删除course。很难理解

create trigger Course_Delete on course instead of delete as declare @cno varchar(20) --定义变量 select @cno = cno from deleted --临时表里的信息是instead of 替换 delete要删除的信息 delete from score where cno = @cno --instead of 替换操作后执行的代码命令 delete from course where cno=