sql基本知识与函数学习

1、创建表

create table student
(
ID INT PRIMARY KEY NOT NULL,
NAME VARCHAR(10) NOT NULL,
AGE INT NOT NULL
)

2、修改表/

alter table dbo.userinfo
alter column username varchar(100)

alter table dbo.userinfo
alter column age float

alter table dbo.userinfo
alter column username float not null

alter table dbo.userinfo
add constraint KID primary key (ID)

update dbo.userinfo set ID=5 where ID=4

delete dbo.userinfo where ID=5

/增加一个grade字段/
alter table dbo.userinfo
add grade varchar (10) not null

3、删除表

drop table userinfo

create table userinfo
(
ID int primary key not null,
username varchar(10) not null,
age int not null
)

4、向表中插入多个数据

insert into “userinfo”
(“ID”,”username”,”age”)
values
(3,’asc’,33),
(4,’nvs’,23)

5、查询出不重复的数据

select distinct ID FROM userinfo

6、常用函数介绍

6.1、top函数

查询在前多少个的数据

select top 50 * FROM userinfo

6.2、IN()函数

查询符合IN括号里边范围的数据

select * from dbo.userinfo where ID IN(2,3,5)

6.3、Exists()函数

联合查询
SELECT ID,USERNAME,AGE FROM dbo.userinfo AS A
WHERE EXISTS (SELECT * FROM dbo.MovieDBs as b WHERE A.ID=b.ID)

6.4、order by

排序 asc是升序,不输入默认为升序,desc为降序/
select * from dbo.userinfo order by ID desc

6.5、avg()

查询平均值

select avg(age) from dbo.userinfo

6.6、sum()

查询和
select sum(age) from dbo.userinfo

6.7、将字段进行连接

select grade+’_’+class from dbo.userinfo

6.8、datalength()

查询数据的长度
select datalength(username) from dbo.userinfo

6.9、floor()函数、celing()函数

floor()函数 向下取整 celling()函数 向上取整 rand()函数 输出一个0-1之间的随机小数

1
2
select floor(RAND()100)
select ceiling(RAND()100)

6.10、GETDATE() GETUTCDATE()

/返回当前数据库系统时间,返回值的类型是datetime/

1
select GETDATE()

/返回当前国际标准时间值,返回值的类型是datetime/

1
select GETUTCDATE()

/Convert函数 把日期转换为新的显示类型 /

1
SELECT CONVERT(VARCHAR(10),GETDATE(),111)

6.11、datediff()函数

返回两个日期之间的天数/

1
2
select DATEDIFF(DAY,'2017-10-1','2018-10-3')
select DATEDIFF(MONTH,'2017-10-1','2018-10-3')

/在指定时间基础上增减时间,返回增减后的新时间/

1
2
select DATEADD(DAY,5,'2019-5-1')  /在2019年5月1日基础上加上五天/
select DATEADD(MINUTE,30,'2019-5-1 12:00:00') /在2019年5月1日 12:00:00基础上加上30分钟/

6.12、DATEPART()函数 DATENAME 函数

用于返回日期、时间的单独部分,比如年、月、日、小时、分钟等,返回值是int整形

1
2
3
select DATEPART(YEAR,GETDATE())  /返回系统当前时间中的年份数字/
select DATEPART(MONTH,GETDATE()) /返回系统当前时间中的月份数字/
select DATEPART(DAY,GETDATE())

DATENAME 函数

用于返回日期、时间的单独部分,返回数类型是varchar类型/

1
select DATENAME(MINUTE,GETDATE()) /返回当前系统时间的分钟数/

6.13、charindex()函数

查找字符串中有没有指定的字符,返回查找到的下标/

1
2
select CHARINDEX('cc','aabbccdd')  /返回5/
select CHARINDEX('cc','aabbccdd',6) /6表示从第6位开始查找,此查询返回0,表示没有查到/

6.14、stuff()函数

用于删除指定长度的字符,病可以在指定的起点处插入另一组字符,返回类型是一个字符串型/

1
2
/select STUFF(列名,开始位置,长度,替代字符串)/
select STUFF('aabbccdd',5,2,'') /使用空字符替换cc的位置/

6.15、SUBSTRING()函数 LEFT()函数 RIGHT()函数 LTRIM()函数 RTRIM()函数

截取指定长度的字符串/

1
2
/SUBSTRING(exprsssion,start,length)/
select SUBSTRING('ASDADJLAKSDKLAS',3,6)/从字符串第三位开始截取,截取6位,然后返回结果/

/LEFT()函数 返回字符串汇中从左边开始指定个数的字符
RIGHT()函数 返回字符串冲右边开始指定个数的字符/

1
2
select LEFT('ASAHSDKJAS',6)/从最左边开始,然后返回6位/
select RIGHT('ASAHSDKJAS',6)/从最右边开始,然后返回最后6位/

/LTRIM()函数 删除字符串左边的空格后返回
RTRIM()函数 删除字符串右边的空格后返回/

1
2
select LTRIM('  SAJ  JKJASD   ')
select RTRIM(' SAJJKJASD ')

6.16、UPPER()函数 LOWER()函数

/UPPER()函数 将小写字符数据转化为大写的
LOWER()函数 将大写字符数据转换为小写/

1
2
select UPPER('asjCLAKSlcak')
select LOWER('ashADHAJASXAAXLKAcan')

6.17、REPLACE()函数 REPLICATE()函数

用另一个字符串值替换出现的所有字符串值/

1
select REPLACE('asdasddavsj','das','zzzz') /第一个字符串是整个字符串,第二个是要替换的字符串,第三个是准备替换成的字符串/

/REPLICATE()函数 指定字符串输出指定次数/

1
select REPLICATE('ABC',5)

6.18、REVERSE()函数

用于倒置字符串中的字符,即倒序输出/

1
select REVERSE('abcdefg')

6.19、CAST()函数

用于将某种数据类型的表达式显式的转换为另一种数据类型/

1
2
select CAST('1234' as varchar)
select 'abc'+CAST('1234' as varchar) /把1234转换为字符串类型就可以与‘abc进行连接’/

/CASE()函数 有两种格式,一个是简单case()函数,一种是case()搜索函数/
/简单case函数/

1
select , case sex when '男' then 'man' when '女' then 'women' end from userinfo

case搜索函数

1
2
3
4
5
6
7
select , 
case
when score>90 then '优'
when score>80 and score<90 then '良'
when score>70 and score<80 then '中'
when score<60 then '差' end
from stu.score;

7、视图

视图是被存储在数据库中的预写查询。视图是由一个SELECT语句,运行视图后,会看到一个视图可以将多个表的数据汇总在一起并将显示,就好像它是一个单一的表。

视图是永远不会自己消失的除非你删除它。
视图有时会对提高效率有帮助。临时表几乎是不会对性能有帮助,是资源消耗者。
视图一般随该数据库存放在一起,临时表永远都是在tempdb里的。

视图适合于多表连接浏览时使用。不适合增、删、改。存储过程适合于使用较频繁的SQL语句,这样可以提高执行效率!

7、1、视图和表的区别和联系

7.1.1、区别

(1)视图没有实际的物理记录,而表有。
(2)表中存储的是内容,视图是显示窗口。
(3)视图只是逻辑概念的存在,表可以及时对它进行修改,但视图只能有创建的语句来修改。
(4)表是内模式,视图是外模式。
(5)视图是查看数据表的一种方法,可以查询数据表中某些字段构成的数据,只是一些SQL语句的集合。从安全的角度说,视图可以不给用户接触数据表,从而不知道表结构。
(6)视图的建立和删除只影响视图本身,不影响对应的基本表。
(7)不能对视图进行update或者insert into操作。

7.1.2、联系

视图(view)是在基本表之上建立的表,它的结构(即所定义的列)和内容(即所有数据行)都来自基本表,它依据基本表存在而存在。
一个视图可以对应一个基本表,也可以对应多个基本表。视图是基本表的抽象和在逻辑意义上建立的新关系。

7.2、创建视图

例、

1
2
3
4
CREATE VIEW CUSTOMERS_VIEW AS
SELECT name, age
FROM CUSTOMERS
WHERE age IS NOT NULL

7.3、更新视图

1
2
3
UPDATE CUSTOMERS_VIEW
SET AGE = 35
WHERE name='Ramesh';

7.4、删除视图中的某条数据

1
2
DELETE FROM CUSTOMERS_VIEW
WHERE age = 22;

7.5、删除视图

1
DROP VIEW view_name;

view_name 表示之前创建视图的名字。

-------------本文结束,感谢您的阅读-------------