未加星标

SQLServer基础

字体大小 | |
[数据库(mssql) 所属分类 数据库(mssql) | 发布者 店小二05 | 时间 2016 | 作者 红领巾 ] 0人收藏点击收藏
SQL Server基础
前提:创建表
create table stuhome
(
son char(12) not null,
father_name varchar(50) not null,
mum_name varchar(50)
)
一、创建标的内容
1、使用INSERT INTO 表名称 VALUES (值1, 值2,….)
insert into student values('1002','张三', '女', '19')
insert into student values('1003','王五', '男', '23')
insert into student values('1004','李四', '女', '34')
insert into student values('1005','赵六', '男', '19')
insert into student values('1006','田七', '女', '21')
2、使用INSERT INTO table_name (列1, 列2,…) VALUES (值1, 值2,….)
insert into Student (sno,sname,gender,dept) values('3001','张三三','男','艺术学')
3、通过INSERT SELECT语句插入多行数据
(1)方法一:通过INSERT SELECT语句插入多行数据将现有表中的数据添加到已有的表中

语法:

INSER INTO <表名><列名>
SELECT<列名>
FROM<源表名>

实例:

insert into student (sno, sname, sgender)
select num, name, gender
from people

注意:student表事先创建好的,并且具有sno, sname, sgender三列;

(二)方法二:通过INSERT SELECT语句插入多行数据将现有表中的数据添加到新创建的表中(这种方式适合做备份)
SELECT <列名>
INTO <表名>
FROM<源表名>

实例:

select sno, sname, sgender
into student
from people

注意:这里的student是原来未创建的表;该语句只能执行一次,因为两次的话这张表就等于新建了两次;

(三)方法三:通过UNION关键字合并数据进行插入

语法:

INSER INTO <表名><列名>
SELECT<列名>UNION
SELECT<列名>UNION
.....

实例:

insert student(sno, sname, sgender)
select '2011', 'LiMing', 'male' union
select '2002', 'Jenny', 'female' union
select '2003', 'Danny', 'male'
二、修改表中的数据
[UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值]
update student set sage = sage + 1 where sname = '张三'
三、删除数据
1、删除表中的数据
[DELETE FROM 表名称 WHERE 列名称 = 值]
delete from student where sname = '张三'
2、删除数据行

语法:

TRUNCATE TABLE 表名

实例:

truncate table student
等同于
delete from student

注意:

truncate table student的话:
1、表结构、列、约束等不会改动
2、不能用于用于有外键约束引用的表
3、标示符重新开始编号
**四、表的查询
[SELECT 列名称 FROM 表名称 & SELECT * FROM 表名称]
1、按行和百分比查询
[SELECT 【top 行数】 列名称 FROM 表名称 & SELECT * FROM 表名称]
select top 3 * from student
select top 3 sna, sname from student
select top 20 percent sno, sname from student
模糊查询
2、结合关系运算符和between…and…为表操作限制条件进行模糊查询(where)

可以用来修改表

update Student set age=20 where sname='张三三'

可用来删除表、

delete from Student where sname='王五'

也可以用来查询表

select * from Student where age>20 and age<25
select * from Student where age=20 or age=25
select * from Student where age between 20 and 25
--between 下限 and 上限
select * from Student where dept='艺术学' or dept='播音学'
select * from Student where dept not in(select dept from Student where sno='3001')
3、使用in来添加多个限制条件进行模糊查询(where)
select * from student where sage in('20', '23')
select * fromo student where sage = '20' or sage = '23'
--上面的这个是等效的;
select * from student where sage not in('20', '23')
4、使用like对限制条件进行模糊匹配(where)
select * from student where sage like '3_'
select * from student where sage not like '3_'
--一个字符
select * from student where sna like '%0%'
select * from student where sna like '0%'
select * from student where sna like '%0'
--任意长度的字符串
select * from student where sna like '200[0-9]'
--括号中所指定范围内的一个字符串
select * from student where sna like '200[^0-9]'
--不在括号中所指定范围内的一个字符
5、order by对表进行排序操作(order by 应该放在where后面)
select * from student order by sage asc
select * from student order by sage desc
6、SQL SELECT DISTINCT 语句 [ELECT DISTINCT 列名称 FROM 表名称]

关键词 DISTINCT 用于返回唯一不同的值

select distinct sna from student
7、给列取别名来查询显示
(1)单列显示
select sna as '学生学号' from student
select '学号'= sno from Student
(2)多列联合显示
select sno + sname from student
select sno +'.'+ sname as '姓名' from student

注意:+连接的数据类型必须兼容;如果是字符型数据,那么连接起来就是字符串数据的连接;如果是数值类型,结果为数值的和;

(3)无中生有
select sno as 'xuehao', sname as 'xingmin', 国家 = 'zhongugo' from student
8、查询为空的项
selext * from student where sage is null
selext * from student where sage is not null

**注意:**null和空字符串是有区别的;

五、SQL函数
字符串函数
1、、charindex()函数

返回字符串首字符在字符串中的索引;

select charindex('sql', 'welcome to sql')
select charindex('sql', 'welcome to sql') as '长度'
2、len()函数

返回字符串的长度

select len('welcome to sql')
select sno, len(sno) as '长度' from student
3、ltrim(), rtrim()函数

清除字符串左右空格的函数;

select ltrim(' nihao')
select rtrim('nihao ')
select ltrim(rtrim(' nihao '))
4、right()函数

从字符串左边开始返回指定数目的字符;

select right('welcome to sql', 3)
5.upper()函数

返回字符串的大写;

select upper('welcome to sql')
6、replace()函数

替换字符串中的字符;

select replace('welcome to sql', 'sql', 'python')
7、stuff()函数
select stuff('welcome to sql', 12, 3, 'python')
--这里的12指的是索引起始位置,3则是长度,python是替代的字符串;
--结果就是:welcome to python
日期函数
1、getdate()函数

返回当前的系统时间;

select getdate()
2、dateadd()函数

对时间进行相加;

select dateadd(yy, 3, '2016-08-17')
select dateadd(mm, 4, '2016-08-17')
select dateadd(dd, 5, '2016-08-17')
3、datediff()函数

获得时间差;

select datediff(yy, '1996-09-21', getdate())
select datediff(mm, '1996-09-21', getdate())
select datediff(dd, '1996-09-21', getdate())
4、datename()函数

返回指定日期部分的字符串形式;

select datename(dw, '2016-08-17')
select datename(month, '2016-08-17')
5、datapart()函数

指定日期部分的整数形式;

select datepart(dw, '2016-08-17')
select datepart(month, '2016-08-17')
select datepart(dd, '2016-08-17')
数学函数
1、rand()函数

返回0-1之间随机的float值

select rand()
2、abs()

取绝对值;

select abs(-13)
3、ceiling()

取大于或是等于指定数值、表达式的最大整数;

select ceiling(33.1)
select ceiling(10/3)
select ceiling(0.1)
4、floor()

去小于或是等于指定数值、表达式的最大整数;

select floor(33.1)
select floor(10/3)
select floor(0.1)
5、power()

求次幂;

select power(5,2)
6、pound()

四舍五入为指定精度;

select round(43.1678, 0)
--上面的第二是参数作用是指定保留要返回的小数位数。
7、sign()

对于正数返回1,对于负数返回-1,0返回0;

select sign(-13)
select sign(13)
select sign(0)
8、sqrt()

求平方根;

select sqrt(9)
系统函数
1、convert()

用来转换数据类型;

select convert(varchar(5), 12345)
select convert(varchar(5), 12345) + 'abc'
select convert(int, '123') + 3
2、current_user

返回当前用户名;

select current_user
3、datalength()

返回用于指定表达式的字节数;

select datalength('welcome to sql')
4、host_name()

返回当前用户所登录的计算机名称;

select host_name()
5、usr_name()

从给定用户的ID返回用户名;

select user_name()
6、system_user()

返回当前所登录的用户名称

select user_name()
六、聚合函数
1、COUNT() 语法
SELECT COUNT(column_name) FROM table_name
COUNT(column_name) 函数返回指定列的值的数目(NULL 不计入):
select COUNT(sname) as 'num' from student
SELECT COUNT(*) FROM table_name
COUNT(*) 函数返回表中的记录数:也就是用有多少行数据;
select COUNT(*) as 'sum' from student

SELECT COUNT(DISTINCT column_name) FROM table_name

select COUNT(distinct sna) from student
2、MAX() 函数
MAX 函数返回一列中的最大值。NULL 值不包括在计算中。
SELECT MAX(column_name) FROM table_name
select MAX(sage) as '最大年龄' from student

**注释:**MIN 和 MAX 也可用于文本列,以获得按字母顺序排列的最高或最低值。

3、MIN() 函数
MIN 函数返回一列中的最小值。NULL 值不包括在计算中。
SELECT MIN(column_name) FROM table_name
select Min(sage) as '最小年龄' from student

**注释:**MIN 和 MAX 也可用于文本列,以获得按字母顺序排列的最高或最低值。

4、SUM() 函数
SUM 函数返回数值列的总数(总额)。
SELECT SUM(column_name) FROM table_name
SELECT SUM(OrderPrice) AS OrderTotal FROM Orders
5、AVG()函数
SELECT AVG(column_age) FROM table_name
求平均值;
select avg(convert(int, sage)) as '平均年龄' from Student
七、分组查询(GROUP BY)
1、简单的分组查询语句(可以分一组也可以分多组)

语法:

**SELECT … FROM<表名>
WHERE …
GROUP BY …
**
select count(*) as '人数' , sage as '年龄' from Student group by sage
注意:
select 列表中只能包含两部分内容:
1、被分组的列,在上面的示例中 sage就是这样的前后都可以出现;
2、为每一个分组返回一个值的表达式,如聚合函数;
2、分组筛选语句

语法:

**
SELECT … FROM<表名>
WHERE …
GROUP BY …
HAVING …
**
select count(*) as '人数' , sage as '年龄' from Student group by sage having sage > 20
注意:
1、having后面的限制条件只能用前面的select中的列表数据;
having和where之间的区别:
where是用来筛选from子句中指定的操作产生的行;
group by子句是用来分组where子句的输出;
having子句是用来从分组的结果中筛选行,必须先分组后筛选;

所以select语句的终极语法就是:

**SELECT COLUMN1、COLUMN2、COLUMN… FROM
WHERE …
GROUP BY …
HAVING …
ORDER BY …**
八、连接查询
a) 内连接

内连接语句:

**
SELECT …
FORM<表一>
INSER JOIN<表二>
ON …**
等同于:
**SELECT …
FORM<表一>,<表二>
WHERE …
**
select s.sno,s.chinese, s.math, s.english , r.sgender, r.sage
from score as s
inner join
Student as r
on s.sno = r.sno
select s.sno, s.chinese, s.math, s.english, r.sgender. r.sage
from score as s, Student as r
where s.sno = r.sno
我们也可以三表,多表联合查询:
我们可以通过两个表中的相同的因子进行查询;
select s.sno, s.chinese, s.math, s.english, d.num, d.louceng
from score as s, Student as r
where s.sno = r.sno and r.sno = d.sno
select s.sno,s.chinese, s.math, s.english , r.sgender, r.sage , d.num, d.louceng
from score as s
inner join Student as r
no s.sno = r.sno
inner join sushe as d
on s.sno = d.sno
b) 外连接
i) 左外连接
如果我们想要的信息在第二张表没有,这在表示缺考的时候特别恰当;
第一张表中是一个参加考试的学生名单<左表>,第二张表中是考试成绩<右表>,但是有时候有的学生调皮就没有去考试,这样就没有成绩,那么我查询的时候就查不到他们信息,所以这里我们就要用左查询,匹配返回结果集,不匹配,NULL值返回到结果集:
语法:
**
SELECT …
FORM<左表>
LEFT JOIN<右表>
ON …**
select s.sno, r.chinese
from Student as s
left join score as r
on s.sno = r.sno

注意:在代码中左表和右表的位置不能发生变化;

ii) 右外连接
右外连接和左外连接的意思差不多,就是将左表和右表的位置调换一下就行了。
语法:
**
SELECT …
FORM<左表>
RIGHT OUTER JOIN<右表>
ON …**
select r.sno, s.chinese
from score as s
right outer join Student as r
on s.sno = r.sno

本文数据库(mssql)相关术语:熊片数据库 mssql数据库 oracle数据库 pubmed数据库 access数据库 万方数据库

主题: SQL数据SUTI删除UTSQL Server
分页:12
转载请注明
本文标题:SQLServer基础
本站链接:http://www.codesec.net/view/484658.html
分享请点击:


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 数据库(mssql) | 评论(0) | 阅读(28)