上篇,我有说到SQL语句和SQL;这次就说如何去使用SQL语句;
首先,我们要知道一些语句里的SQL命令的作用;
- select 从数据库中提取数据
- update 更新数据库中的数据
- delete 从数据库中删除数据
-
insert into 向数据库中插入新数据
-
create database 创建新数据库
-
alter database 修改数据库
-
create table 创建新表
-
alter table 修改(变更、改变)数据库表
-
drop index 删除索引
-
. drop table 删除表
-
create index 创建索引(搜索键)
如上,这些都是我在上文说到过,但是如果要详细使用,这些是不够,我们还要熟悉SQL里的那些数据类型,在SQL Server中,它的数据类型可以分为:string 类型、number 类型、date 类型、其它数据类型,而SQL Server的 string 类型又可以详细的分为:Character 字符串、Unicode 字符串、binary 类型;如下:
String 类型: Character 字符串
- char(n) 固定长度的字符串。最多 8,000 个字符。
- varchar(n) 可变长度的字符串。最多 8,000 个字符。
- vachar(max) 可变长度的字符串。最多 1,073,741,824 个字符。
- text 可变长度的字符串。最多 2GB 字符数据。
String 类型: Unicode 字符串
- nchar(n) 固定长度的 Unicode 数据。最多 4,000 个字符
- nvarchar(n) 可变长度的 Unicode 数据。最多 4,000 个字符
- nvarchar(max) 可变长度的 Unicode 数据。最多 536,870,912 个字符。
- ntext 可变长度的 Unicode 数据。最多 2GB 字符数据。
String 类型:Binary 类型
- bit 允许 0、1 或 NULL
- binary(n) 固定长度的二进制数据。最多 8,000 字节。
-
varbinary(n) 可变长度的二进制数据。最多 8,000 字节。
-
varbinary(max) 可变长度的二进制数据。最多 2GB 字节。
-
image 可变长度的二进制数据。最多 2GB 。
Character 字符串中的 varchar与Unicode字符串中的nvarchar对比
比较 项 | varchar | nvarchar |
字符 数据 类型 | 可变长度的非Unicode字符 |
可变长度, Unicode 和非 Unicode 字符, 如:中 文,日语和韩语。 |
最大 长度 |
最多 8000 个字符 |
最多 4000 个字符 |
字符 大小 |
每个字符占用 1 个字节 |
每个 Unicode/ 非 Unicode 字符占用 2 个字节 |
使用 |
当数据长度为可变或可变长度列且 实 际数据始终小于容量时使用 |
仅限存储,仅在需要 Unicode 支持时使用, 例如:汉字,日语或韩文字符。 |
这个时候,我们就要用上别的SQL命令;如下:
我这里有 一个数据库,名称为:SQLS,我现在要用SQL语句将这个数据库里的Course表里的Cname字段类型改nvarchar,并修改其长度为100;
如图:这个是未修改之前的类型
当我们执行如下这条语句:
alter table Course
alter column Cname nvarchar(100)
就会改变原有的数据类型,如效果右图:
查询score表前五条数据(由高到低的顺序排序),查询这个的语句有两种
方法一:SELECT * FROM SC
ORDER BY score DESC
OFFSET 0 ROWS
FETCH NEXT 5 ROWS ONLY
方法二:select top 5* from SC
order by Score desc
效果如右图:
集合运算符;
一、SQL Server Union(并集)
SQL Server Union是一组集合操作,用于将两个select语句的结果组合到一个结果中,该结果集包括属于union中select语句的所有行;通俗点来说,就是将地方A中的狗和地方B中的猫集合到同一个地方中;
如:查询所有的学生姓名和老师姓名。(学生表为:Student,学生名称为:Sname;老师表为:Teacher;老师名称为:Tname)
首先,我们先看,这是用语句单独查出来的:
一:select Sname from Student 二: select Tname from Teacher
学生名称: 老师名称:
当我们用union来查时,语句为:
select Sname from Student
union
select Tname from Teacher
结果为:,由结果就可以很明显的看出union的作用
1、 union 与union all 的区别
在默认的情况下,union运算符从结果集中删除所有重复的行。但是,如果要保留重复的行,则需要明确指定 all 关键字;UNION 运算符删除重复行,而 UNION ALL 运算符在最终结果集中包含重复行。
union语句:
select first_name,last_name from bk_stores.sales.staffs
union
select first_name,last_name from bk_stores.sales.customers
结果:
union all语句:
select first_name,last_name from bk_stores.sales.staffs
union all
select first_name,last_name from bk_stores.sales.customers
结果:
由上面的两个结果可以很明显的看出union 语句比 union all 语句少了一条,少了一条重复的行,不过至于是那条我就不清楚了,毕竟这有一千多条,懒的去弄,知道就行了;
2、 union 与 join
inner join 或 left join 等连接组合了两个表中的列,而 union组合了查询中的行。换句话来说,join 会水平附加结果集,而 union 会垂直附加结果集
3、union 和order by 组合使用
如果要对 union 运算符返回的结果集进行排序,就将 order by 子句放在最后一个查询中;
语句:
select first_name,last_name from bk_stores.sales.customers
union all
select first_name,last_name from bk_stores.sales.staffs
order by first_name,last_name
结果: