标签:lca 浮点 除了 tar 组合查询 保存 upd 大写 一个
看了sql必知必会,简单总结一下
--:--之后的文本就是注释,可以嵌在语句内
#:#之后的一行都是注释
/注释/:多行注释
select 关键字 from 表名;
select 关键字,关键字,关键字 from 表名;
select * from 表名;
select distinct 关键字 from 表名;
只返回有不同值的列(1)sql server和access数据库:select top 数字 关键字 from 表名;
返回前数字行数据
(2)mysql和sqlite数据库:
select 关键字 from 表名 limit 数字;
返回不超过数字行数据
select 关键字 from 表名 limit 数字1 offset 数字2;
返回从数字2开始的后数字1行数据
select 关键字 from 表名 limit 数字2,数字1;
返回从数字2开始的后数字1行数据
select 关键字 from 表名 order by 列名;
select 关键字,关键字,关键字 from 表名 order by 列名1,列名2;
即检索的数据先按列名1排序,拥有相同列名1的值的,再按列名2的值排序select 关键字,关键字,关键字 from 表名 oeder by 2,3;
这里即检索的数据先按第二个关键字的列排序,再按第三个关键字的列排序(1)可以使and,or进行连接,但and的优先级更高,可以通过()对and,or进行优先分组,如:select name,price from product where price=2 and name<>‘aa‘;
即从prduct中选出price为2且name不为aa的数据
(2)in:可以用来指定条件范围,如select name,price from product where name in (‘aa‘,‘bb‘);
即选出name为aa或bb的数据
(3)not:否定后面的语句,如select name,price from product where not price=3;
即选出price不等于3的数据
通配符搜索只能用于文本字段,通配符是用来匹配值的一部分特殊字符,这种过滤需要使用like
(1)%:任何字符出现任何次数(在access中使用*),如:select name,price from product where name like ‘aa%‘;
即检索product中name是以aa开头的任何字符串的数据。
注意:%可以匹配0个字符,但不匹配Null。另外如abc空格是不能通过a%c匹配的,因为有空格,所以应用a%c%匹配
(2)_(在access中使用?):与%相似,只匹配一个字符
(3)[](只有access和sqlserver支持):指定字符集,指定匹配位置的匹配的一个字符。如:select name,price from product where name like ‘[as]dd‘;
即选出name值是以a或s开头的以dd结尾的数据。另外可以用^进行否定(access用!),如:select name,price from product where name like ‘[^as]dd‘;
即选出name值不是以a或s开头的,但是以dd结尾的数据
用来对检索出的数据计算,转换,格式化,虽然客户端也可以处理,但数据库处理更快
(1)拼接字段||(oracle和sqlite等使用) 或+(sql server和access使用):如:select name+‘(‘+price+‘)‘ from product;
输出形如: apple (3.2)
(2)mysql使用函数concat,如select concat(name,‘(‘,price,‘)‘ )from product;
(3)别名:as
上述处理过的数据只是显示出来,不能用于客户端程序中,用as 关键字,处理的结果保存在以该关键字命名的列中,方便应用程序利用
如select name+‘(‘+price+‘)‘ as name_price from product;
支持加减乘除,且可以用括号表示优先级
如:select name,price,num,price*num as sum from product;
返回形如,
name | price | num | sum |
---|---|---|---|
apple | 3.5 | 4 | 14 |
不同的dbms的函数不尽相同
各dbms不同
差不多一致
select name,count(*) as number from product group by name;
即先对数据按name分组,再计算改组有多少行。例如,product表有生产人员id列,name列,price列,people表有生产人员id列,姓名people_name列。查找某产品(apple)的生产人员的姓名:select people_name from people where id in(select id from product where name=‘apple‘);
如:select name, (select count(*) from orders where orders.id=customer.id)as orders from customers;
用一条语句来查询多个表的数据
如:select vend_name,prod_name,prod_price from vendors,products where vendors.vend_id=products.vend_id;
其中vend_name是vendors表的列,后两个是products的列,两个表通过vend_id联系
相同的:select vend_name,prod_name,prod_price from vendors inner join products on vendors.vend_id=products.vend_id;
(1)使用别名:如:select vend_name,prod_name,prod_price from vendors as v,products as p where v.vend_id=p.vend_id;
(2)自联结:如:select name,price from products as p1,products as p2 where p1.price=p2.price and p2.name=‘apple‘;
即找出和apple价格相同的数据,查询使用了两个相同的表
(3)外联结:联结将一个表的行与另一个表的行相关联,但有时需要包含没有关联行的那些行。左关联:left,右关联:right,全关联:full。如:elect vend_name,prod_name,prod_price from vendors left inner join products on vendors.vend_id=products.vend_id;
union:在多条语句间使用union。union会自动剔除重复行,union连接的各语句必须是查询相同的列
1、insert into values(各列值)。其中into可省,但是插入数据时最好给出列名。如向表product插入数据:insert into product(id,name,price) values(‘1‘,‘apple‘,‘3.5‘);
2、插入检索出的数据:insert into product(id,name,price) select id,name,price from product2;
即将从product2检索出的数据插入product中
3、复制表:select * into product from product2;
将product2的内容复制到product中,如果只想复制几列,给出列名即可。mysql等的语法稍有不同,create table product as select * from product2;
update product set price=‘4‘ where name=‘apple‘;
即将apple的价格更新为4delete from product where name=‘apple‘;
即删除名字为apple的这一行1、创建表:
create table( 列名 数据类型 Notnull或默认的null default 值, ) default 值(用来指定默认值,可选),不同dbms创建表不一样
2、删除表:drop table 表名
3、更新表:alter
视图是虚拟的表,只包含动态检索数据的查询,access不支持视图
1、使用视图简化复杂联结
如;create view 视图名 as select vend_name,prod_name,prod_price from vendors,products where vendors.vend_id=products.vend_id;
使用视图:select vend_name,prod_name from 视图名 where vend_id=‘aaa‘;
2、重新格式化检索出的数据
如:select name+‘(‘+price+‘)‘ from product;
这样的数据可以保存到视图中
create view 视图名 as select name+‘(‘+price+‘)‘ from product;
只要输入select * from 视图名;即输出上句的效果
3、与上同理可以使用视图过滤不想要的数据,使用视图与计算字段
存储过程好像一个函数,包含多条语句,有参数,返回值等。dbms不同创建存储过程不同。创建时一般都有create peocedure 名字,调用时一般使用到execute
事务处理能确保一组sql操作要么完全被执行,要么完全不被执行,确保数据库的完整性。事务处理关键在于将sql分解为块,并明确规定数据何时回退,何时不回退。
(1)事务处理块的标识
sql server:begin transaction ...commit transaction mysql:start transaction oracle:set transaction
(2)回退语句
rollback
(3)保留点
保留点取能够唯一标识的名字,在回退时,dbms知道回退到何处。
创建保留点: Mysql和oracle等 :savepoint 名字;sql server:save transaction 名字;
回退保留点:mysql等:rollback to 名字;sql server: rollback transaction 名字;
alter table 表名 add constraint foreign key (列名) references 另一表名(列名)
crreate table 表名( number integer not null check(number >4) )
即插入的Number值必须满足大于4标签:lca 浮点 除了 tar 组合查询 保存 upd 大写 一个
原文地址:https://www.cnblogs.com/Qi-Lin/p/11334021.html