SQL基础知识学习.docx
《SQL基础知识学习.docx》由会员分享,可在线阅读,更多相关《SQL基础知识学习.docx(10页珍藏版)》请在冰豆网上搜索。
SQL基础知识学习
SQL基础知识学习
1基础知识
1.1结尾
一般情况下情况,一条sql语句以;结尾
1.2合并两列成一列
方法:
使用+
举例:
selectbend_name+bend_countasvend_title
fromVendors
orderbyvend_name;
1.3like和通配符使用
用法:
where列名like'%123'
举例:
selectprod_id,prod_name
fromProducts
whereprod_namelike'Fish%';
%表示任何字符出现任意次数,但是无法匹配null
1.4常用文本处理函数
LEFT()返回字符串左边的字符
length(),datalength()len(),返回字符串的长度
lower(),字符串转小写
upper(),字符串转大写
ltrim(),去掉左边空格
rtrim(),去掉右边空格
right(),返回字符串右边字符
substring(,),截取字符串
to_date,字符串转日期
1.5常用数值处理函数
abs(),绝对值
cos(),余弦
exp(),指数值
pi(),圆周率
sin(),正弦
sqrt(),平方根
tan(),正切
1.6常见聚合函数
AVG
max
min
count
sum
1.7groupby
作用,对聚合函数进行限定
规则:
如果在select中使用表达式,则必须在groupby字句中指定相同的表达式,不能使用别名
groupby在按组计算聚类时候使用,不使用会报错
1.8having
作用:
过滤分组
1.9where
作用:
过滤行级
1.10select子句顺序
select
from
where
groupby
having
orderby
1.11as
as可以给字段,给表,取别名
2多表联结查询
2.1多表查询1:
使用子查询wherein,子查询效率低,不建议使用
作为子查询的select语句只能查询单个列,企图检索多个列将返回错误
方法:
在wherein(子查询语句)
举例:
select*
fromcustomers
wherecust_idin(selectcust_id
fromOrders
whereorder_numin(selectorder_num
fromorderItems
whereprod_id='rgan01'));
2.2多表查询2:
内连接的两种方式,内连接是一种等值连接
2.2.1方式1:
from多表,where主键限定
举例:
selectvend_name,prod_name,prod_price
fromVendors,Products
whereVendors.vend_id=Product.vend_id;
举例:
select*
fromcustomers,Orders,orderItems
wherecustomers.cust_id=Orders.cust_id
andOrder.order_num=orderItems.order_num
andorderItems.prod_id='rgan01';
2.2.2方式2:
innerjoin内连接
方法:
from表1innerjoin表2on表1.列名=表2.列名
举例:
selectvend_name,prod_name,prod_price
fromVendorsinnerjoinProduct
onVendors.vend_id=Product.vend_id;
自然连接:
内连接一种:
排除查询出的重复列
2.3外连接:
左关联leftouterjoin
以左表为基准,选出左表所有行
用法from表1leftouterjoin表2
举例:
selectCustomers.cust_id,count(Orders.order_num)asnum_ord
fromCustomersleftouterjoinOrders
onCustomers.cust_id=Orders.cust_id
groupbyCustomers.cust_id;
内连接和外连接区别:
外连结包含没有关联行的行,显示为null
2.4使用带聚集函数的外关联,记得加groupby
selectcustomers.cust_id,count(Orders.order_num)asnum_ord
fromCustomersleftouterjoinorderd
onCustomers.cust_id=Orders.cust_id
groupbyCustomers.cust_id;
2.5一般可以使用内连接的,使用外连接也会有效
3组合查询
也叫(并,union),也叫(复合查询,compoundquery)
union,直接连接组合select语句即可
用法:
select语句1unionselect语句2
规则:
每个查询语句包含相同列,表达式或者聚集函数,对应列数据类型要兼容
扩展:
union会默认去重,使用unionall可保留重复项;orderby只能在最后出现
理解:
union完成的基本都可以用多个where语句实现
4插入语句
4.1插入一行数据
用法1:
insertinto表1(列1,列2)
values(值1,值2);
4.2查询结果插入到现有表中
用法2:
insertinto表1(列1,列2)
select列1,列2
from表2
4.3查询结果插入到新表中
用法3:
createtable新表名as
select列1,列2from表1
5更新数据update
用法:
update表1
set列1=值1,
列2=值1
可以指定where条件,不指定则更新所有行
6delete删除表中的数据,不删除表
用法:
delete
from表1
可以指定where条件,不指定则更新所有行
注:
truncatetable,也是只删除数据,但速度更快,不记录表变动
7创建表
用法:
createtable表名
(
列名1字段类型是否可为nulldefault值,
列名1字段类型是否可为null,
列名1字段类型是否可为null
......
);
举例:
createtableOrderItems
(
order_numintegernotnull,primarykey
order_itemintegernotnull,
prod_idchar(10)notnull,
quantityintegernotnulldefault1,
item_pricedecimal(18,2)
);
规则:
某些需要指定创建表的路径;默认可为空,列名和类型是必须的,primarykey,null和default列可选填写
8修改表结构
8.1增加列
用法:
altertable已存在表名
add新列名字段类型
举例:
altertableVendors
addvend_phonechar(20);
8.2删除列
用法altertable已存在表名
dropcolumn已存在列名
举例:
altertableVendors
dropcolumnvend_phone;
8.3删除表和表结构
droptable表名
8.4创建视图(虚拟表)
createview视图名称as
select查询语句
9存储过程:
执行多条sql语句
作用:
类似编程中函数,方法等概念
createprocedureMailingListCount(
ListCountOUTinteger-----out,存储过程将返回一个值
)
is
v_rowsinteger---声明变量v_rows
begin---beginend中写存储过程要实现的功能
selectcount(*)intov_rows
fromCustomers
wherenotcust_emailisnull;--功能语句,把取得的结果赋值给声明的变量v_rows
ListCount:
=v_rows;--把v_rows赋值给ListCount
end;
执行存储过程,execute存储过程名字(参数)
10事务处理:
保证不出错的执行多条sql语句
举例:
begintransaction
deleteOrdeItemswhereorder_num=12345
deleteOrderswhereorder_num=12345
committransaction
11游标:
用于浏览查询结果集中上下行
declarecursor游标名-------------声明游标
is
select语句
opencursor游标名---------------打开游标
fetch游标名into列---------------使用游标
close游标名-------------------关闭游标
12触发器:
特殊的存储过程
在特定的数据库活动时候执行,与单个表相关联
存储过程,只是存储多个sql语句,不执行,执行需要写execute
13速查
ALTERTABLE
ALTERTABLE用来更新现存表的模式。
可以用CREATETABLE来创建一个新表。
详情可参见第17课。
COMMIT
COMMIT用来将事务写入数据库。
详情可参见第20课。
CREATEINDEX
CREATEINDEX用来为一列或多列创建索引。
详情可参见第22课。
CREATETABLE
CREATETABLE用来创建新的数据库表。
可以用ALTERTABLE来更新一个现存表的模式。
详情可参见第17课。
CREATEVIEW
CREATEVIEW用来创建一个或多个表的视图。
详情可参见第18课。
DELETE
DELETE用来从表中删除一行或多行。
详情可参见第16课。
DROP
DROP用来永久性地删除数据库对象(表、视图、索引等)。
详情可参见第17课和第18课。
INSERT
INSERT用来对表添加一个新行。
详情可参见第15课。
INSERTSELECT
INSERTSELECT用来将SELECT的结果插入到表中。
详情可参见第15课。
ROLLBACK
ROLLBACK用来撤销事务块。
详情可参见第20课。
SELECT
SELECT用来从一个或多个表(或视图)中检索数据。
详情可参见第2课、第3课和第4课(第2课到第14课从不同方面涉及了SELECT)。
UPDATE
UPDATE用来对表中的一行或多行进行更新。
详情可参见第16课。