sql_学习笔记

来源:互联网 发布:无声告白 知乎 编辑:程序博客网 时间:2024/05/20 04:09
SQL 语句对大小写不敏感
SQL 使用单引号来环绕文本值,如果是数值,请不要使用引号
SQL 删除所有行
delete from table_name or delete * from table_name
SQL Top 子句
sqlserver:top
select top number|percent column_name from table_name;


mysql:limit
select column_name from table_name limit number;

oracle:rownum
select column_name from table_name rownum<= number;
SQL 通配符
%   代替一个或多个字符
_   仅代替一个字符
    [] 字符列表中任何单一字符
    [^]或[!] 不在字符列表中任何单一字符
SQL in
允许我们在where子句中规定多个值
SQL Between
操作符between ... and 会选取介于两值之间的数据范围。这些值可以是数值、文本或者日期
不同的数据库对between...and操作符的处理方式是有差异的。
SQL alias
表的sql alias 语法
select column_name(s) from table_name as alias_name;
列的sql alias 语句
select column_name as alias_name from table_name;
SQL join...on
inner join:在表中存在至少一个匹配时,inner join 关键字返回所有行。(会查出重复记录)
join:如果表中至少有一个匹配,则返回行。
inner join 和 join 是相同的。
left join:即使右表中没有数据,也从左表中返回所有数据,在某些数据库中成为left outer join
right join:即使左表中没有数据,也从右表中返回所有行,在某些数据库中成为right outer join
full join:只要其中一个表中存在匹配,就返回行,在某些数据库中成为full outer join
mysql 数据库不支持full join,实现方式:left join union right join
SQL union
union 操作符用于合并两个或多个 select 语句的结果集。
默认的,union操作符选取不同的值。如果允许重复的值,请使用 union all
SQL select into
select column_name(s) into new_table_name [IN externaldatabase]
from old_tablename
mysql 不支持 select into
create table new_table_name(select * from old_table_name);
SQL 约束
not null:约束强制不接受null值
unique:唯一约束
创建表时创建unique约束:
mysql:unique(column_name)
sqlserver/oracle/ms access:unique
创建表时,为unique约束命名:
mysql/sqlserver/oracle/ms access:constraint unique_name unique(column_name)
后期添加unique约束:
add constraint unique_name unique(column_name)
撤销unique约束:
mysql:
drop index unique_name
sqlserver/oracle/ms access
drop constraint unique_name
primary key:主键约束
主键包含唯一值
主键不能为空
撤销primary key:
mysql:drop primary key
sqlserver/oracle/ms access:drop constraint pk_name
foreign key:一个表中的foreign key 指向另一个表的priamry key
撤销foreign key:
mysql:
drop foreign key fk_name
sqlserver/oracle/ms access
drop constraint fk_name
check:用于限制列中的值的范围
对于单个列定义check约束,那么该列只允许特定的值。
如果对于一个表的定义check约束,那么此约束会在指定的列中对值进行限制。
撤销check约束:
mysql:
drop check ck_name;
sqlserver/oracle/ms access
drop constraint ck_name;

default:约束向列中插入默认值
撤销default约束:
mysql:
alter column_name drop default;
sqlserver/oracle/ms access
alter column cloumn_name drop default;
SQL 索引
可以在表中创建索引,以便更加高效快速的查询数据。
用户无法看见索引,他们只能被用来加速查询/搜索。
更新一个包含索引的表比需要更新一个没有索引的表需要更多的时间,这是因为索引本身也需要更新。所以理性的做法是在常常被索引到的上建立索引。
create index index_name on table_name(column_name);
create index index_name on table_name(column_name desc);
create index index_name on table_name(column_name1,column_name2);
唯一索引
在一个表上创建唯一索引,这意味着两个行不能拥有相同的索引。
create unique index index_name on table_name(column_name);

撤销索引:
sqlserver:
drop index table_name.index_name;
mysql:
alter table table_name drop index index_name;
ibm db2  和 oracle
drop index index_name;


SQL drop 和 truncate
drop table table_name : 用于删除表结构 属性 索引
truncate table table_name : 仅仅删除表格中的数据

SQL alter
添加列:
alter table_name add column_name type;
删除列(不同的数据库系统可能会不同):
alter table_name drop column column_name;
改变列类型:
sqlserver:
alter table table_name alter column column_name type;
mysql:
alter table table_name modify column column_name type;


SQL 自增字段
mysql:auto_increment,开始值是1,每条新纪录递增1
sqlserver:identity,开始值是1,每条记录递增1
access:autoincrement
oracle:sequence
create squence seq_name minvalue 1 start with 1 increment by 1 cache 10;
SQL view:
视图包含行和列,就像一个真实的表。视图中的字段就是来自一个或多个数据库中的真实表字段。我们可以向视图中添加sql函数,where以及join语句,我们可以提交数据,就像这些来自于某个单表的数据。
数据库的设计或结构不会受到视图中的函数、where或join语句的影响。
1.创建视图
create view as select column_name(s) from table_name;
2.更新视图
create or replace view view_name as select column_name(s) from table_name;
3.撤销视图
drop view view_name;

SQL date:
mysql date 函数
now():返回当前日期和时间
select now();
curdate():返回当前日期
select curdate();
curtime():返回当前时间
select curtime();
date():提取日期或者时间的日期部分
select date(now());
extract():提取日期或者时间的单独一部分
select extract(day from now());
date_add():给日期添加指定的时间间隔
select date_add(now(),interval 30 day);
date_sub():给日期减去指定的时间间隔
select date_sub(now(),interval 1 day);
datediff():返回两个日期之间的天数
select datediff(now(),'2012-12-21');
date_format():用不同的格式显示日期或时间
select date_format(now(),'%Y');
SQL null:默认的表列可以存放null值。
null值的处理方式和其他值不同。
null用作未知的或不适用的值的占位符。
null值的操作必须使用 is null 和 is not null
函数:
sqlserver/ms access:
isnull();
oracle:
nvl();
mysql:
ifnull();
coalesce();

SQL 数据类型:
http://www.w3school.com.cn/sql/sql_datatypes.asp

SQL 函数:
mysql:
ucase():将字段的值转换为大写
lcase():将字段的值转换为小写
mid(column_name,start,length):从文本字段中提取字符,start 从1开始
length():返回文本字段中值的长度
round(column_name,decimals):把数值字段舍入为指定小数的位数