数据库(SQL语言基础)
主参考材料:菜鸟教程
SQL是用于管理关系数据库管理系统的一门结构化查询语言。可以对数据库中的数据进行CRUD,同时也可以对数据库模式进行创建和修改,以及数据访问控制。虽然SQL语言已经是一种标准,但是仍有很多不同版本的SQL语言。
关于SQL语言的语法主要有insert、delete、 update、select、create、alter、drop、grant、revoke等构成。SQL语句默认不区分大小写。
基础
select 语句:查询语句
select distinct column_name1, column_name2
from table_name1
where condition1 and condition2
group by condition3
having condition4
order by column_name1, column_name2 ASC;
select表示的就是查询记录;distinct就代表查询的结果中不会出现重复的元组,可以省略;后面是列的名字,可以是任意个,此外可以用 * 代替,表示所有的列名;
from后是表的名字,代表着数据是来自于哪个表的,可以是多个表;
where表示的就是条件语句,用来提取满足条件的记录;条件语句中的运算符包括=(等于)、<>(不等于,有些版本可写称!=)、>(大于)、>=(大于等于)、between……and……(在某个范围内)、like(搜索某种模式,用于字符串的模糊查询)、in(指定这对某个列的多个可能值)、is null(是空值);多个条件子句之间可以用and、or、not连接;
group by则表示按照某种条件进行分组,一般是配合分组函数使用;
having不能单独使用,需要结合group by,用于解决where不能实现的条件判断;
order by则是排序,按照后面列名排序;结尾可以加asc(升序)和desc(降序)排列,如果不加入这两个关键字,则默认会是升序;
insert 语句:插入语句
insert into table_name1 (column_name1, column_name2)
values (value1, value2);
insert into表示的是在table_name1插入值,插入的值value和列名column_name要对应,如果后面没有列名则会按照表中列名的顺序进行赋值插入
update 语句:更新语句
update table_name1
set column_name1 = value1, column_name2 = value2
where condition1 or condition2;
update则表示更新表table_name1中记录,某一列中的值进行赋值操作,如果没有where语句进行提取的话,则会将某一列是数据都进行更新。
delete 语句:删除语句
delete from table_name1
where condition1;
表示删除table_name1中满足条件的记录,如果没有where,则会删除表中的所有记录,该语句只能删除表中的内容,并不能删除表。
高级
-
TOP语句:当面对记录条数过多时,我们则可用以下方式进行对返回条数的规定
-
MySQL语法: select column_name1
from table_name1
limit num;
-
SQL Server/MS Access语法 select TOP num|precent column_name1
from table_name1;
-
Oracle语法 select column_name
from table_name1
where rownum <= num;
-
模糊查询:like语法 select column_name1
from table_name1
where column_name like pattern;
- % 表示替代0个或多个字符
- _ 表示替代一个字符
- [charlist] 表示字符串中的任意单一字符
- [^charlist]或[!charlist] 表示不在字符列中的任何单一字符
-
in语法 select column_name1
from table_name1
where column_name1 in (value1, value2);
-
between语法: select column_name1
from table_name1
where colmun_name between value1 and value2;
-
SQL别名 select column_name as alias_name
from table_name;
-
join:用于把两个或多个表的行结合起来 select *
from table_name1
join table_name2
on condition1;
- inner join:如果表中有一个匹配,则返回行
- left join:即使右表中没有匹配,也从左表返回所有的行
- right join:即使左表中没有匹配,也可以从右表返回所有的行
- full join:只要其中一个表中存在匹配,则返回行(但MySQL目前不支持)
-
union:操作符 select * from table_name1
union all
select * from table_name2;
-
select into语句(Mysql不支持,但支持insert into……select) select *
into table_name1
from table_name2;
把表table_name1中的记录插入到table_name2中,可以完成复制操作,也可以用以下语法完成复制 create table new_table
as
select * from old_table;
-
insert into select 语句 insert into table1 (column_names)
select (colmun_names) from table2;
-
create database语句 create database database_name;
-
create table语句 create table table_name (
column_name1 data_type(size)
column_name2 data_type(size)
);
-
SQL约束:用于规定表中的数据规则,如果存在违反约束的数据行为,行为会被约束终止,约束可以在表创建之时规定,也可以在表创建之后。
-
not null 则该列不能为null 创建表的时候添加 create table table_name1 (
column_name1 datatype(size) not null
);
创建表之后添加not null alter table table_name1
modify column_name1 datatype(size) not null
删除not null约束 alter table table_name1
modify column_name1 datatype(size) null
-
unique约束:该列是一个候选键 MySQL: create table table_name1(
column_name1 datatype(size) not null,
column_name2 datatype(size),
unique(column_name1)
);
SQL Server/Oracle/MS Access create table table_name1 (
column_name1 datatype not null unique
);
MySQL/SQL Server/Oracle/MS Access:多个元素 create table table_name1 (
column_name1 datatype not null,
column_name2 datatype not null,
column_name3 datatype,
constraint constraint_name unique (column_name1, column_name2)
);
alter table table_name1
add unique(column_name1);
alter table table_name1
add constraint constraint_name unique(column_name1,column_name2);
撤销unique约束 MySQL: alter table table_name1
drop index constraint_name;
SQL Server/Oracle/MS Access: alter table table_name1
drop constraint constraint_name;
-
primary key约束:表示该列为主键;语法与候选键约束相类似,将unique换成primary key,index 约束名换成primary key -
foreign key约束:表示是指向另一个表的外键,语法与候选键约束相类似,将unique换成foreign key (父表列名) references 子表名(子表列名),撤销语法index 约束名换成foreign key约束名 -
check约束:用于限制列中的范围,语法与候选键约束相类似,将unique换成check condition,撤销语法index 约束名换成constraint 约束名,要将constraint 约束名 改为 check 约束名。 -
default约束:用于向列中插入默认值 MySQL/SQL Server/Oracle/MS Access: create table table_name1 (
column_name1 datatype(size) default default_value
);
alter table table_name1
alter column_name set default default_value;
alter table table_name1
add constraint constraint_name default default_value for column_name;
alter table table_name1
modify column_name default default_value;
撤销约束
alter table table_name1
alter column_name drop default;
alter table table_name1
alter column column_name drop default;
-
create index语句:为表创建索引,可以让查找的效率提高 create unique index index_name
on table_name(column_name);
-
drop语句
drop index index_name on table_name;
drop index table_name1.index_name1;
drop index index_name;
alter table table_name1 drop index index_name;
drop table table_name1;
drop database database_name;
truncate table table_name1;
-
alter table 语句
alter table table_name1
add column_name datatype(size);
alter table table_name1
drop column column_name;
alter table table_name1
alter column column_name datatype(size);
alter table table_name1
modify column column_name datatype(size);
-
auto increment 字段
create table table_name1 (
column_name datatype(size) auto_increment
);
alter table table_name1 auto_increment = 100;
create table table_name1 (
column_name datatype(size) identity(num, i)
);
create table table_name1 (
column_name datatype(size) autoincrement
);
create sequence name
minvalue num1
start with num2
increment by num3
cache num4;
insert into table_name(increment_column, column_name)
value (name.nextval, column_value);
-
view 视图,就是基于SQL语句的结果的可视化的表
create view view_name as
select column_names
from table_name1;
create or replace view view_name as
select column_names
from table_name1;
drop view view_name;
|