1、SQL基础知识学习SQL基础知识学习1 基础知识1.1 结尾 一般情况下情况,一条sql语句以;结尾1.2 合并两列成一列方法:使用+举例: select bend_name + bend_count as vend_title from Vendors order by vend_name;1.3 like和通配符使用用法:where 列名 like %123举例:select prod_id,prod_name from Products where prod_name like Fish%;%表示任何字符出现任意次数,但是无法匹配null1.4 常用文本处理函数LEFT() 返回字符串左
2、边的字符length(),datalength() len(),返回字符串的长度lower() ,字符串转小写upper(),字符串转大写ltrim(), 去掉左边空格rtrim(),去掉右边空格right(),返回字符串右边字符substring(,),截取字符串to_date ,字符串转日期1.5 常用数值处理函数abs(),绝对值cos(),余弦exp(),指数值pi(),圆周率sin(),正弦sqrt(),平方根tan(),正切1.6 常见聚合函数AVGmaxmincountsum1.7 group by 作用,对聚合函数进行限定规则:如果在select 中使用表达式,则必须在grou
3、p by 字句中指定相同的表达式,不能使用别名group by 在按组计算聚类时候使用,不使用会报错1.8 having作用:过滤分组1.9 where作用:过滤行级1.10 select子句顺序selectfromwheregroup byhavingorder by1.11 asas 可以给字段,给表,取别名2 多表联结查询2.1 多表查询1:使用子查询where in ,子查询效率低,不建议使用作为子查询的select语句只能查询单个列,企图检索多个列将返回错误方法:在where in (子查询语句)举例:select * from customers where cust_id in
4、(select cust_id from Orders where order_num in (select order_num from orderItems where prod_id =rgan01);2.2 多表查询2:内连接的两种方式,内连接是一种等值连接2.2.1 方式1:from 多表,where 主键限定举例:select vend_name,prod_name ,prod_price from Vendors,Products where Vendors.vend_id = Product.vend_id;举例:select * from customers, Orders,
5、orderItems where customers.cust_id =Orders.cust_id and Order.order_num = orderItems.order_num and orderItems.prod_id = rgan01;2.2.2 方式2:inner join内连接方法: from 表1 inner join 表2 on 表1.列名 = 表2.列名举例:select vend_name,prod_name,prod_price from Vendors inner join Product on Vendors.vend_id = Product.vend_id
6、;自然连接:内连接一种:排除查询出的重复列2.3 外连接:左关联 left outer join以左表为基准,选出左表所有行用法 from 表1 left outer join 表2举例:select Customers.cust_id, count(Orders.order_num) as num_ordfrom Customers left outer join Orders on Customers.cust_id= Orders.cust_idgroup by Customers.cust_id;内连接和外连接区别:外连结包含没有关联行的行,显示为null2.4 使用带聚集函数的外关联
7、,记得加group byselect customers.cust_id,count(Orders.order_num) as num_ordfrom Customers left outer join orderdon Customers.cust_id =Orders.cust_idgroup by Customers.cust_id;2.5 一般可以使用内连接的,使用外连接也会有效3 组合查询也叫(并,union),也叫(复合查询,compound query)union,直接连接组合select语句即可用法:select语句1 union select语句2规则:每个查询语句包含相同列
8、,表达式或者聚集函数,对应列数据类型要兼容扩展:union 会默认去重,使用union all可保留重复项;order by 只能在最后出现理解:union 完成的基本都可以用多个where语句实现4 插入语句4.1 插入一行数据用法1:insert into 表1(列1,列2) values (值1,值2);4.2 查询结果插入到现有表中用法2:insert into 表1(列1,列2) select 列1,列2 from 表24.3 查询结果插入到新表中用法3:create table 新表名 as select 列1,列2 from 表15 更新数据update用法:update 表1s
9、et 列1 =值1, 列2 =值1可以指定where 条件,不指定则更新所有行6 delete删除表中的数据,不删除表用法:deletefrom 表1可以指定where条件,不指定则更新所有行注:truncate table ,也是只删除数据,但速度更快,不记录表变动7 创建表用法:create table 表名( 列名1 字段类型 是否可为null default 值, 列名1 字段类型 是否可为null, 列名1 字段类型 是否可为null .);举例:create table OrderItems( order_num integer not null, primary key orde
10、r_item integer not null, prod_id char(10) not null, quantity integer not null default 1, item_price decimal(18,2);规则:某些需要指定创建表的路径;默认可为空,列名和类型是必须的,primary key,null和default列可选填写8 修改表结构8.1 增加列用法:alter table 已存在表名add 新列名 字段类型举例:alter table Vendorsadd vend_phone char(20);8.2 删除列用法 alter table 已存在表名drop c
11、olumn 已存在列名举例:alter table Vendorsdrop column vend_phone;8.3 删除表和表结构drop table 表名8.4 创建视图(虚拟表)create view 视图名称 asselect查询语句9 存储过程:执行多条sql语句作用:类似编程中函数,方法等概念create procedure MailingListCount( ListCount OUT integer -out,存储过程将返回一个值 ) is v_rows integer -声明变量v_rows begin -begin end 中写存储过程要实现的功能select count
12、(*) into v_rows from Customers where not cust_email is null; -功能语句,把取得的结果赋值给声明的变量v_rowsListCount :=v_rows; -把v_rows赋值给ListCount end; 执行存储过程,execute 存储过程名字(参数)10 事务处理:保证不出错的执行多条sql语句举例:begin transactiondelete OrdeItems where order_num =12345delete Orders where order_num =12345commit transaction11 游标:
13、用于浏览查询结果集中上下行declare cursor 游标名 -声明游标isselect 语句open cursor 游标名 -打开游标fetch 游标名 into 列 -使用游标close 游标名 -关闭游标12 触发器:特殊的存储过程在特定的数据库活动时候执行,与单个表相关联存储过程,只是存储多个sql语句,不执行,执行需要写execute13 速查ALTER TABLEALTER TABLE用来更新现存表的模式。可以用CREATE TABLE来创建一个新表。详情可参见第17课。COMMITCOMMIT用来将事务写入数据库。详情可参见第20课。CREATE INDEXCREATE IND
14、EX用来为一列或多列创建索引。详情可参见第22课。CREATE TABLECREATE TABLE用来创建新的数据库表。可以用ALTER TABLE来更新一个现存表的模式。详情可参见第17课。CREATE VIEWCREATE VIEW用来创建一个或多个表的视图。详情可参见第18课。DELETEDELETE用来从表中删除一行或多行。详情可参见第16课。DROPDROP用来永久性地删除数据库对象(表、视图、索引等)。详情可参见第17课和第18课。INSERTINSERT用来对表添加一个新行。详情可参见第15课。INSERT SELECTINSERT SELECT用来将SELECT的结果插入到表中。详情可参见第15课。ROLLBACKROLLBACK用来撤销事务块。详情可参见第20课。SELECTSELECT用来从一个或多个表(或视图)中检索数据。详情可参见第2课、第3课和第4课(第2课到第14课从不同方面涉及了SELECT)。UPDATEUPDATE用来对表中的一行或多行进行更新。详情可参见第16课。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1