SQL基础(二)
top
用于规定要返回的记录的数目
select top number | percent column_name(s) from table_name
like 以及 not like
用于在where 子句中搜索列中的指定模式
select column_name(s) from table_name where column_name like pattern
select * from persons where city like '%lon%'
SQL通配符
在搜索数据库中的数据时,SQL通配符可以替代一个或多个字符,通配符必须和LIKE一起使用。
% 替代一个或多个字符
_ 下划线仅替代一个字符
[charlist] 字符列中的任何单一字符
[^charlist]或[!charlist] 不在字符列中的任何单一字符
select * from persons where city like '[ALN]%' 居住的城市以 A ,L或 N开头的人
in 允许我们在where 子句中规定多个值
select column_name(s) from table_name where column_name in (v1,v2,v3``````)
between ····· and
选取介于两个值之间的数据范围
select column_name(s) from table_name where column_name between value1 and value2
某些数据库不包括边界,某些包括
判断字符顺序的时候可以使用这个
sql alias
可以为列名称和表名称指定别名
select column_name(s) from table_name as alias_name
select column_name as alias_name from table_name
sql join 根据两个或 多个表中列之间的关系,从这些表中查询数据
数据库中的表可通过键将彼此联系起来。主键是一个列,在这个列中每一行的值都是唯一的。在表中,每个主键的值都是唯一的,这样做的目的是在不重复每个表中的所有数据的情况下,把表间的数据交叉捆绑在一起
select p.firstname,p.lastname,o.orderno from persons as p inner join orders o on p.id_p = o.id_p
inner join 内连接 在表中存在至少一个匹配时,则返回行
join 如果表中有至少一个匹配,则返回行
select column_name(s) from table_name1 inner join table_name2 on table_name1.column_name = table_name2.column_name
left join 即使右表中没有匹配,也从左表返回所有的行
select column_name(s) from table_name1 left_join table_name2 on table_name1.column_name = table_name2.column_name
right join 即使左表中没有匹配,也从右表返回所有的行
select column_name(s) from table_name1 right join table_name2 on table_name1.column_name = table_name2.column_name
full join 只要其中一个表中存在匹配,就返回行。
select column_name(s) from table_name1 full join table_name2 on table_name1.column_name = table_name2.column_name
sql union
用于合并两个或多个select 语句的结果集
select column_name(s) from table_name1
union
select column_name(s) from table_name2
注意:union 内部的select语句必须拥有相同数量的列,列也必须拥有相似的数据类型。同时,每条select语句中的列的顺序必须相同。
union 和union all 执行结果的唯一区别就是,union 会将相同结果的行合并成一行,而union all会显示所有的
union 结果集中的列名总是等于union第一个select中的列名
select into
从一个表中选取数据,然后把数据插入另一个表中。常用于创建表的备份复件或者用于对记录进行存档。
select * into new_table_name [in externaldatabase] from old_tablename
select column_name(s) into new_table_name [in externaldatabase] from old_tablename
new_table_name 该数据库不能是已经存在的表
create table table_name(
id int primary key identity(1,1) not null,
column1 varchar(20) not null,
column2 datetime ,
column3 decimal(18,2) not null,
id_p int foreign key references table_name2(id_p)
)
SQL 约束
not null 不接受null值
unique 唯一标识数据库表中的每条记录,没有相等的
primary key 主键
foreign key 外键 foreign key (id_p) references persons(id_p)
check 用于限制列中的值的范围
default 用于向列中插入默认值
CONSTRAINT
【ADD CONSTRAINT 约束名 UNIQUE (Id_P,LastName)】
alter table persons drop constraint 约束名
alter table orders add constraint 约束名 foreign key (id_p) references persons(id_p)
alter table persons add constraint chk_person check (id>0 and city ='sandnes')
alter table persons alter column city drop default
create index 语句用于在表中创建索引,在不读取整个表的情况下,索引使数据库应用程序可以更快地查找数据
用户无法看到索引,它们只能被用来加速搜索/查询
注:更新一个包含索引的表需要比更新一个没有索引的表更多的时间,这是由于索引本身也需要更新。因此,理想的做法是在常常被搜索到的列(以及表)上面创建索引。
create index index_name on table_name (column_name)
create unique index index_name on table_name(column_name) 唯一的索引意味着两个列不能拥有相同的索引值。
create index personindex on person (lastname desc)
drop
drop index 索引名 on 表名
drop table 表名
drop database 数据库名
truncate table 表名 仅删除表内的数据,不删除表本身
alter table 添加,修改或删除列
alter table table_name add column_name datatype
alter table table_name drop column column_name
alter table table_name alter column column_name datatype 改变表中列的数据类型
如果column有索引,则不能对该列进行数据类型修改或者删除,只有删除索引后,才可以对该类进行操作
auto-increment
插入表中时生成一个唯一的数字
view
视图是基于SQL语句的结果集的可视化的表。
视图包含行和列,就像一个真实的表。视图中的字段是来自一个或多个数据库中的真实的表中的字段。我们可以向视图添加SQL函数、where以及
join语句,我们也可以提交数据,就像这些来自于某一个单一的表。
数据库的设计和结构不会受到视图中的函数、where或join语句的影响。
create view view_name as select column_name(s) from table_name where condition
create view 必须是批处理中仅有的语句,即查询中不能有其他语句
更新视图:create or replace view yma1_view as select year,amount from yma1【在测试的时候,出错,错误提示:or 附近存在语法错误】
删除视图:drop view view_name
日期
在处理日期时,需要确保所插入的日期格式,与数据库中日期列的格式相匹配。如果数据包含的只是日期部分,运行查询就不会出问题,但是,
如果涉及时间,情况就会变得复杂。