SQL易忘知识点总结

SQL易忘

sql不区分大小写

sql注释

# 注释内容
-- 注释内容
/* 注释
   内容
	*/

用于返回不重复的值

select distinct * from ... 

环绕文本值(字符串)以单引号为主

order by 默认升序排序(ANS),逆序关键字(DESC)

select * from .. 
order by .. desc;

order by 多序排列时,靠前的优先级高,且可分组

order by a,b,c;

insert into 特殊变量为标注确定值可自动生成,如id

insert into table_name
values (value1,value2...);

使用update语句必须规定where 子句,否则所有的记录都将被更新

update table_name
set column1=value1 , ...
where some_column=some_value;

使用delete 语句如果不加where 子句,所有的行都将被删除,但是表未删除的情况下,

表的结构、属性、索引都将保持不变

delete from table_name
where name='aim_to_delete_name';

select top 或 limit 或 rownum 用于规定选出的记录的数目

根据不同的数据库选用不同的关键字

限制可以是数量(num),也可以是百分比(percent)

like 操作符

select  * from table_name
where name like 'G%';
# "%"为通配符,例中表示以G开头的所有名字

通配符:

  • “%” 匹配任意字符

  • “_” 任意单个字符

  • 正则表达式

select * from table_name
where name REGEXP '^[abc]';
# 选取以a或b或c开头的所有name
# NOT REGEXP表示取反

IN 操作符

select column_name(s)
from table_name
where column_name IN (value1,value2,...);#相当于多个and

between操作符

select * from table_name
where column_name between value1 and value2;# 取反:not between

AS操作符:别名,as可省略,但尽量不省略

别名中有空格的话需使用单引号或双引号括起来

  • 列别名
  • 表别名

JOIN 连接

inner join 关键字在表中存在至少一个匹配时返回行(交集)

(inner 可省略)

select table1.id,table1...... ,table2.id ,.....
from table1
inner join table2
on table1.id=table2.id;

left join 关键字(左表为主,右表没有对应值为null)

左表table1中返回所有行,及时右表中没有匹配,不匹配的返回NULL

right jion 与上对应(右表为主,左表没有对应值为null)

full outer jion(取并集,两个表自己没有对应值的为null)

Union操作符:合并两个或多个select语句的结果

注意:Union每个select语句必须拥有相同数量的列,列也必须拥有相似的数据类型,且select语句中的列的顺序必须相同,才能进行union

select column_name(s) from table1
union
select column_name(s) from table2
where ...
order by ... ;
# select中列名必须对应
# 默认为选取不同的值,如允许选取重复的值需使用 union all

select into 从一个表中复制数据,然后把数据插入到另一个新表中

等价于

cerate table new_table
as 
select * from old_table;
select * 
into new_table
from old_table
where ...;
# 备注:新表将会使用select语句中定义的列名和类型进行创建,也可以使用as子句来应用新的名称

insert int select语句

从一个表复制数据,然后插入到另一个已经存在的表中

insert into table_aim
select * from table_source;
# 只复制目标列到另一个已经存在的表中
insert into table_aim
(column_name(s))
select column_name(s)
from table_source;

create database语句

create table + constraint 约束

create table table_name
(
column1 int,
column2 varchar(255),
...
);
  • not null:不能存放空值
  • unique:每行必须有唯一值
  • primary key:等价于not null + unique 每个表只能有一个primary key约束
  • foreign key:保证一个表中的数据匹配另一个表中的值的参照完整性
  • check:保证列中的值符合指定条件
  • default:规定没有给列赋值时的默认值

not null

create table table_name
(
id int not null;
...
)
# 添加not null 约束
alter table table_name
modify id int not null;

# 删除not null约束
alter table table_name
modify id int null;

unique

# 创建表添加unique约束语法由数据库种类决定

# 不同数据库alter table 时添加、撤销此约束时语法亦有差异

primary key

foreign key

check (附加约束条件)

default(附加缺省内容)

create index

创建索引,在不读取整个表的情况下,可以更快查找数据

create index index_name
on table_name (column_name,.....)
# 不允许使用重复的值:唯一的索引意味着两个行不能拥有相同的索引值
# 使用create unique index ......

drop

drop table table_name
drop database database_name
# 删除索引视数据库决定

# 删除表中数据,而不删除表本身
truncate table table_name

alter table

# 在表中添加列
alter table table_name
add column_name datatype
# 修改表中列的数据类型
alter table table_name
alter column column_name datatype

# 删除表中列
alter table table_name
alter column column_name

auto increment

新纪录插入表中时生成一个唯一的数字

create table table_name
(
id int not null auto_increment,
......
)
# 默认开始值是1,递增1
# 从固定值开始递增如下:
alter table table_name auto_increment=100

视图views

基于sql语句的结果集的可视化的表

create view view_name as
select column_name(s)
from table_name
where condition
  • 视图隐藏了底层的表结构,简化了数据访问操作,客户端不需要指导底层表的结构及其之间的关系
  • 视图提供了一个统一访问数据的接口,即可以允许用户通过视图访问数据的安全机制,而不授予用户直接访问底层表的权限
  • 加强了安全性,只能看到视图所显示的数据
  • 视图可以被嵌套,一个视图中可以嵌套另一个视图

日期 data函数

is null & is not null

select * from table_name
where column_name is not null

各种数据类型

各种函数

group by

用于结合聚合函数,根据列对结果集进行分组

select column_name , arrregate_function(column_name)
from table_name
where column_name operator value
group by column_name

having子句

解决where关键字无法和聚合函数一起使用的问题,可以让我们筛选分组后的各组数据

select column_name,aggrefate_function(column_name)
from table_name
where column_name operator value
group by column_name
having aggregate_function(column_name) operator value;

exists运算符

判断查询子句是否有记录,如果有一天或者多记录则返回存在true,反之返回false

select column_name(s)
from table_name
where exists
(select ......);

以上是本人在菜鸟教程中复习sql基础知识的部分总结笔记,内容比较笼统,更多内容请访问

[菜鸟教程–SQL教程](SQL 教程 | 菜鸟教程 (runoob.com))

你可能感兴趣的:(笔记,sql,数据库,java)