SQL server学习(二)表结构操作、SQL函数、高级查询
数据库查询的基本格式为:
select ----输出(显示)你要查询出来的值 from -----查询的依据 where -----筛选条件(对依据(数据库中存在的表)) group by -----对筛选后的数据 进行分组 having ----- 筛选条件(对分组后的结果再次筛选) order by -----将结果进行排序
注意:基本语法格式顺序不能变,顺序不能变,但可以缺省
表结构操作
表结构操作是需要去修改表结构,使用的关键字是alter,其他方式无法对表进行操作的时候,比如,新增列,删除列,修改列类型等操作,就需要使用alter方法了。
新增列
alter table stu
add sid int
删除列
alter table stu
drop column sid
修改列类型
alter table stu
alter column sid char(1)
修改列类型需要注意的是:如果列中有数据,则不能修改该列数据类型
新增约束
alter table stu
add constraint ck_ssex check (ssex=0 or ssex=1)
新增两列
alter table stu
add siphone nchar(11),smoney money
删除约束
alter table stu
drop ck_ssex
SQL函数
SQL函数分为五类,字符串函数,日期函数,数学函数,系统函数,聚合函数
字符串函数如下表所示:
|
函数名 |
描述 |
举例 |
|
charindex |
用来寻找一个指定的字符串在另一个字符串中的起始位置 |
select charindex('apple','this is apple',1)返回值为:9 |
|
len |
返回传递给它的字符串长度 |
select len('yihuqingjiu') 返回值为:11 |
|
lower |
把传递给它的字符串转换为小写 |
select lower('YIHUQINGJIU') 返回值为:yihuqingjiu |
|
upper |
把传递给它的字符串转换为大写 |
select upper('yihuqingjiu') 返回值为:YIHUQINGJIU |
|
ltrim |
清除字符左边的空格 |
select ltrim(' yihuqingjiu ') 返回值为:yihuqingjiu ,左边空格被清除 |
|
rtrim |
清除字符串右边的空格 |
select rtrim('yihuqingjiu ') 返回值为: yihuqingjiu,右边空格被清除 |
|
right |
从字符串右边返回指定数目的字符 |
select right('yihuqingjiu',3) 返回值为:jiu |
|
replace |
替换一个字符串中的字符 |
select replace('yihuqingjiu','yi','wen') 返回值为:wenhuqingjiu |
|
stuff |
在一个字符串中,删除指定长度的字符,并在该位置插入一个新的字符串 |
select stuff('yihuqingjiu',3,6,'wen') 返回值为:yiwenjiu,3,6指的是,以第三个字符开始,往后6个字符都删除 |
日期函数如下表所示:
|
函数名 |
描述 |
举例 |
|
getdate |
获取当前的系统日期 |
select getdate() 返回值为:当前的时间日期 |
|
dateadd |
将指定的数值添加到指定的日期部分后的日期 |
select dateadd(dd,4,'17/6/17') 返回值为:2017-06-21,年为yy,月为mm,日为dd,所以上述代码在日为17的基础上加4 |
|
datediff |
两个日期之间的指定日期部分的区别 |
select datediff(mm,'17/8/15','17/10/15') 返回值为:2,月份相差2,年月日表示方法同上 |
|
datename |
日期中指定日期部分的字符串形式 |
select datename(dw,'17/10/7') 返回值为:星期六 |
|
datepart |
日期中指定日期部分的整数形式 |
select datepart(day,'17/10/7') 返回值为:7 |
日期参数及缩写如下表所示:
|
日期部分 |
缩写 |
|
year |
yy, yyyy |
|
quarter(表季度,返回1-4) |
qq, q |
|
month |
mm, m |
|
dayofyear(在当前时间的多少天) |
dy, y |
|
day |
dd, d |
|
week |
wk, ww |
|
weekday |
dw |
|
hour |
hh |
|
minute |
mi, n |
|
second |
ss, s |
|
millisecond |
ms |
数学函数如下表所示:
|
函数名 |
描述 |
举例 |
|
abs |
取数值表达式的绝对值 |
select abs(-1025) 返回值为:1025 |
|
ceiling |
返回大于或等于所给数字表达式的最小整数 |
select ceiling(28.9) 返回值为:29 |
|
floor |
取小于或等于指定表达式的最大整数 |
select floor(28.9) 返回值为:28 |
|
power |
取数值表达式的幂值 |
select power(8,2) 返回值为:64 |
|
round |
将数值表达式四舍五入为指定精度 |
select round(36.55789,3) 返回值为:36.55800 |
|
sign |
对于正数返回1,负数返回-1,0则返回0 |
select sign(36) 返回值为:1 |
|
sqrt |
取浮点表达式的平方根 |
select sqrt(16) 返回值为:4 |
系统函数如下表所示:
|
函数名 |
描述 |
举例 |
|
convert |
用来转变数据类型 |
select convert(nchar(3),123) 返回值为:123 |
|
current_user |
返回当前用户的名字 |
select current_user 返回值为:用户分组名,dbo或guest |
|
datalength |
返回用于指定表达式的字节数 |
select datalength('用户分组名dbo') 返回值为:13,汉字占两个字节 |
|
host_name |
返回当前用户所登录的计算机名字 |
select host_name() 返回值为:所登录的计算机名 |
|
system_user |
返回当前所登录的用户名称 |
select system_user 返回值为:当前登录名,比如sa |
|
user_name |
从给定的用户ID放回用户名 |
select user_name(1) 返回值为:dbo,括号中数字不同返回的数据也不同 |
聚合函数如下所示:
min ---最小 max ---最大 sum ---和 avg ---平均 count ---统计(个数)
需要注意的是:聚合函数需要和分组group by一起使用
例:
select avg(成绩)
from student
group by 科目
高级查询
查询中where与having的区别:
本质上没有区别,都是对数据做筛选,只不过 where对原始表中的数据筛选,而having是对分完组后的数据筛选
去重复的关键字是distinct
例:
select distinct depart
from teacher
多表查询
多表查询需要将表连接在一张表中做查询操作,连接表有如下几种方式
1.全连接(笛卡尔连接)
2.左连接
3.右连接
4.内连接
第一种连接方式语法为:
select *
from 表1,表2
where 表1.列=表2.列
第二种连接方式的语法为:
select *
from 表1 left join 表2 on 表1.列=表2.列
第三种连接方式的语法为:
select *
from 表1 right join 表2 on 表1.列=表2.列
第四种连接方式的额语法为:
select *
from 表1 inner join 表2 on 表1.列=表2.列
子查询
子查询分为四种,where子查询、from子查询、in子查询和exists子查询
where子查询是将一个查询的结果作为另一个查询的条件
from子查询是将一个查询的结果作为另一个查询的来源(表)
in子查询是指要查询的数据包含其中
exists子查询是判断某数据是否存在
where子查询例:
select stuName
from stuInfo
where stuNo=(select stuNo from stuMarks where writtenExam=60)
where条件查询:
a. 比较运算符 = ,!=(<>),< > <= >=
b. like , not like ('%'匹配任意多个字符,'_'匹配任意单个字符)
c. in , not in , between and
in,匹配多个数据
like,模糊查询,对字符、字符串使用
shop_price between 1000 and 3000
d. is null , is not null
通配符如下表所示:
|
通配符 |
解释 |
示例 |
|
‘_’ |
一个字符 |
A Like 'C_' |
|
% |
任意长度的字符串 |
B Like 'CO_%' |
|
[ ] |
括号中所指定范围内的一个字符 |
C Like '9W0[1-2]' |
|
[^] |
不在括号中所指定范围内的一个字符 |
D Like ‘%[A-D][^1-2]' |
from子查询例:
select *
from (select * from score,grade where degree>low and degree< upp) as a
where rank='A'
in子查询例:
select stuName
from stuInfo
where stuNo in (select stuNo from stuMarks)
exists子查询例:
if exists(select * from sys.databases where name='new')
drop database new
其中sys.databases是指系统中所有的数据库,exists返回值是true或false
一般来说,表连接都可以用子查询替换,但有的子查询却不能用表连接替换。子查询比较灵活、方便,常作为增删改查的筛选条件,适合于操纵一个表的数据,表连接更适合于查看多表的数据。
排序
排序分为降序和升序,很简单,看个例子就明白。
升序例:
select *
from student
order by sno asc
降序例:
select *
from student
order by sno desc
按多列排序:
select *
from student
order by sno asc,scj asc
排序需要注意的是,若排序字段没有name,在select显示是输出不了的。
限制固定行数显示:
select top 5 sname,saddress
from student
where ssex=0
也可以用*代表所有列
返回百分之多少行:
select top 20 percent sname,saddress
from student
where ssex=0
SQL server学习(二)表结构操作、SQL函数、高级查询的更多相关文章
- Sql Server 导出数据库表结构的SQL查询语句
--导出数据库所有表 SELECT 表名 Then D.name Else '' End, 表说明 Then isnull(F.value,'') Else '' End, 字段序号 = A.colo ...
- sql server抓取表结构的语句
sql server 2008抓取方法: --------------------------------------- SELECT 表名 = Case When A.colorder ...
- SQL Server 动态创建表结构
需求是,在word里面设计好表结构(主要在word中看起来一目了然,方便维护),然后复制sql 里面,希望动态创建出来 存储表结构的表 CREATE TABLE [dbo].[Sys_CreateTa ...
- (转)Sql Server 快速查看表结构(表描述及字段说明)
--表描述 SELECT tbs.name 表名,ds.value 描述 FROM sys.extended_properties ds LEFT JOIN sysobjects tbs ON ds. ...
- MS SQL Server中数据表、视图、函数/方法、存储过程是否存在判断及创建
前言 在操作数据库的时候经常会用到判断数据表.视图.函数/方法.存储过程是否存在,若存在,则需要删除后再重新创建.以下是MS SQL Server中的示例代码. 数据表(Table) 创建数据表的时候 ...
- SQL Server 的数据表简单操作
--创建数据表--[use 要创建数据表的数据库名称go]create table 要创建的表名(字段名 数据类型[长度] [null | not null] [primary key],... .. ...
- SQL Server 2012 - 数据表的操作
unicode:双字节编码 variable:可变的 character:字符 T-SQL: Transact Structured Query Language unique:唯 ...
- sql server 2000系统表sysproperties在SQL 2008中无效的问题
Sqlserver有一个扩展属性系统表sysproperties,因为只接触过MSSQL2005及以后的版本,在生产库2008版本及联机文档上搜了下都找不到这个系统表,后来发现这个系统表在2005版本 ...
- Microsoft SQL Server学习(五)--操作符聚合函数
算术运算符 逻辑运算符 比较运算符 聚合函数 算术运算符(+ - * / ) select score*2 as 成绩翻倍 from class_A update class_A set score= ...
随机推荐
- Vue-Methods中使用Filter
1.Vue中Filter声明方式 Vue中存在两种声明Filter过滤器的方式: 1.全局过滤器 Vue.filter('testFilter1',function(val){ console.log ...
- SUID、SGID、Sticky BIT
添加SUID: chmod 4755 可执行文件名 或 chmod u+s 可执行文件名 删除SUID: chmod 755 可执行文件名 或 chmod u-s 可执行文件名 [root@local ...
- sourceTree每次拉取代码和提交代码都需要输入密码
今天新安装的sourceTree导入项目,拉取代码的时候一直提示让我输入git密码,每次拉取和提交的时候都需要重新输入密码,甚是麻烦,在网上,搜索,解决办法五花八门,这里提供一种简单有效的方法供大家参 ...
- iOS 数据储存--SQLite 操作数据库-FMDB,sqlite数据类型,保存图片,demo
1.SQLite 语句中 数据类型的储存 /* 不区分大小写 char(长度).字符串 NULL. 空值 INTEGER. 整型 REAL.浮点型 TEXT.文本类型 BLOB. 二进制类型,用来存储 ...
- xCode8以及iOS10 的新特性
其他:ios10中 适配问题(1.系统判断方法失效:2.隐私数据的访问问题:3.UIColor 问题4.真彩色的显示5.ATS问题6.UIStatusBar问题7.UITextField8.UserN ...
- C++各种指针辨析
1)int *p p与*结合,表明p是一个指针 然后前面int说明p是一个整形的指针 2)int *p[n] 因为[]比*优先级高,所以p先与[]结合,表明p是个数组,然后这个数组在与*结合,说明数组 ...
- Wincc flexable的数据记录的组态
1.数据记录就是将PLC采集的数据记录下来如下,注意只有TP270和OP270以上的HMI设备才有数据记录 2.练习展示 3.开始创建数据记录 4.组态数据记录 5.组态变量的记录属性.将数据记录和变 ...
- 掌握numpy(二)
目录 掌握numpy(一) 掌握numpy(二) 掌握numpy(三) 掌握numpy(四) 数组的reshape 顾名思义,就是对数组的形状进行改变,比如行变成列,一行变多行等. in place ...
- python 中一些关键字的区别
一.raw_input 和input input和raw_input都可以读取控制台的输入,但是input和raw_input在处理数字时是有区别的 1.当输入为纯数字时 input返回的是数值类型, ...
- linux大文件分包压缩和批量解压命令tar // tar 排除指定目录
压缩命令主要用到tar打包和split分割,命令如下: tar czf - aaa | split -b 1024m - bbb.tar.gz_ aaa可以是文件也可以是目录, 大小可以是b.k.m这 ...