《基础语法篇》增删改查

insert

3种基础insert
insert into 表名 values(值1,值2,......);
insert into 表名(列1,列2,......)values(值1,值2,......);
insert into2 select * from1;
把查询结果导入到另外一张表中
-- 把A表的全部字段数据插入到B表中(AB表结构相同):
insert into B select * from A;
-- 把A表中某些字段的数据插入B表中:
insert into B(字段名)(select 字段名 from A)

delete

update

更新多个字段

(1)

-- 一般会这样写
update student
  set sname = '李四',
	  sage = 20,
	  sbirthday = to_date('2010-01-01', 'yyyy-mm-dd'),
	  saddress = '广州市越秀区'
where sid = 1;

(2)

-- 如果字段非常多
update student
  set (sname, sage, sbirthday, saddress) =
  (select '李四', 20, to_date('2010-01-01', 'yyyy-mm-dd'), '广州市越秀区' from dual)
where sid = 1;
根据一张表更新另一张表

1.游标

declare
cursor t1 is select * from tablename;
begin
for rec in t1 loop
update tablename t set t.detail=rec.jieshao where t.objectid=rec.objid;
end loop;
end;
update   student   set   (name,id   )=
(select   name   ,id     from   (select   student.rowid   rd,student1.name,student1.id   from   student1,student   where   student1.int_id   =student.int_id)   tmp
where   student.rowid=tmp.rd);
commit;

3.exits

update test_a a set (a.name,a.age)=
(select b.name,b.age from test_b b where a.id = b.id) where exists
(select * from test_b c where c.id=a.id)
UPDATE   t_A   SET   Djrq=
(
SELECT   djrq   FROM   t_B   WHERE   t_A.ID   =   T_B.ID
WHERE   ROWNUM   =   1
)
WHERE   t_A.ID   IN
(
SELECT   ID   FROM   t_B   WHERE   jwh='XX村'
)
update tbl1 a   set (a.col1, a.col2) = (select b.col1, b.col2
from tbl2 b
where a.key = b.key)   where a.key in(select key from tbl2)

select

表关联

join,把来自两个或多个表的行结合起来

下图展示了 LEFT JOIN、RIGHT JOIN、INNER JOIN、OUTER JOIN 相关的 7 种用法。
image

演示如下
在本教程中,我们将使用 RUNOOB 样本数据库。
下面是选自 "Websites" 表的数据:

+----+--------------+---------------------------+-------+---------+
| id | name         | url                       | alexa | country |
+----+--------------+---------------------------+-------+---------+
| 1  | Google       | https://www.google.cm/    | 1     | USA     |
| 2  | 淘宝          | https://www.taobao.com/   | 13    | CN      |
| 3  | 菜鸟教程      | http://www.runoob.com/    | 4689  | CN      |
| 4  | 微博          | http://weibo.com/         | 20    | CN      |
| 5  | Facebook     | https://www.facebook.com/ | 3     | USA     |
| 7  | stackoverflow | http://stackoverflow.com/ |   0 | IND     |
+----+---------------+---------------------------+-------+---------+

下面是 "access_log" 网站访问记录表的数据:

mysql> SELECT * FROM access_log;
+-----+---------+-------+------------+
| aid | site_id | count | date       |
+-----+---------+-------+------------+
|   1 |       1 |    45 | 2016-05-10 |
|   2 |       3 |   100 | 2016-05-13 |
|   3 |       1 |   230 | 2016-05-14 |
|   4 |       2 |    10 | 2016-05-14 |
|   5 |       5 |   205 | 2016-05-14 |
|   6 |       4 |    13 | 2016-05-15 |
|   7 |       3 |   220 | 2016-05-15 |
|   8 |       5 |   545 | 2016-05-16 |
|   9 |       3 |   201 | 2016-05-17 |
+-----+---------+-------+------------+
9 rows in set (0.00 sec)

请注意,"Websites" 表中的 "id" 列指向 "access_log" 表中的字段 "site_id"。上面这两个表是通过 "site_id" 列联系起来的。
然后,如果我们运行下面的 SQL 语句(包含 INNER JOIN):

SELECT Websites.id, Websites.name, access_log.count, access_log.date
FROM Websites
INNER JOIN access_log
ON Websites.id=access_log.site_id;

结果如下:
image

INNER JOIN:如果表中有至少一个匹配,则返回行
LEFT JOIN:即使右表中没有匹配,也从左表返回所有的行
RIGHT JOIN:即使左表中没有匹配,也从右表返回所有的行
FULL JOIN:只要其中一个表中存在匹配,则返回行
union、union all,合并多个 SELECT 语句的结果集

请注意,UNION 内部的每个 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每个 SELECT 语句中的列的顺序必须相同。
注释:UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。

  • union,只有不同的值
  • union all,所有值

如下:
下面是选自 "Websites" 表的数据:

mysql> SELECT * FROM Websites;
+----+--------------+---------------------------+-------+---------+
| id | name         | url                       | alexa | country |
+----+--------------+---------------------------+-------+---------+
| 1  | Google       | https://www.google.cm/    | 1     | USA     |
| 2  | 淘宝          | https://www.taobao.com/   | 13    | CN      |
| 3  | 菜鸟教程      | http://www.runoob.com/    | 4689  | CN      |
| 4  | 微博          | http://weibo.com/         | 20    | CN      |
| 5  | Facebook     | https://www.facebook.com/ | 3     | USA     |
| 7  | stackoverflow | http://stackoverflow.com/ |   0 | IND     |
+----+---------------+---------------------------+-------+---------+

下面是 "apps" APP 的数据:

mysql> SELECT * FROM apps;
+----+------------+-------------------------+---------+
| id | app_name   | url                     | country |
+----+------------+-------------------------+---------+
|  1 | QQ APP     | http://im.qq.com/       | CN      |
|  2 | 微博 APP | http://weibo.com/       | CN      |
|  3 | 淘宝 APP | https://www.taobao.com/ | CN      |
+----+------------+-------------------------+---------+
3 rows in set (0.00 sec)

执行union:

SELECT country FROM Websites
UNION
SELECT country FROM apps
ORDER BY country;

image

执行union all:

SELECT country FROM Websites
UNION ALL
SELECT country FROM apps
ORDER BY country;

image

表操作相关

创建表

暂无

复制表

复制表结构及其数据

create table table_name_new as select * from table_name_old

只复制表结构

create table table_name_new as select * from table_name_old where 1=2;
-- 或者:
create table table_name_new like table_name_old

条件

start with connect by,查询树结构
selectfrom tablename
start with 条件1
connect by 条件2
where 条件3;
--例如:
select * from table
start with org_id = ‘HBHqfWGWPy’
connect by prior org_id = parent_id;

一个表中存在两个字段:org_id,parent_id,那么通过表示每一条记录的parent是谁,就可以形成一个树状结构,用上述语法的查询可以取得这棵树的所有记录,其中:

  • 条件1 是根结点的限定语句,当然可以放宽限定条件,以取得多个根结点,实际就是多棵树。
  • 条件2 是连接条件,其中用PRIOR表示上一条记录,比如 CONNECT BY PRIOR org_id = parent_id;就是说上一条记录的org_id 是本条记录的parent_id,即本记录的父亲是上一条记录。
  • 条件3 是过滤条件,用于对返回的所有记录进行过滤
CASE WHEN THEN ELSE END,条件语句,支持嵌套

嵌套方式

select case
		 when (1 = 1) then
			  case when(2=3) then
					   'A'
				  else  'K'
				  end
		 else
		  'b'
	   end
  from dual;
posted @   Fusio  阅读(19)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示
目录导航
目录导航
《基础语法篇》增删改查
insert
3种基础insert
把查询结果导入到另外一张表中
delete
update
更新多个字段
根据一张表更新另一张表
select
表关联
join,把来自两个或多个表的行结合起来
union、union all,合并多个 SELECT 语句的结果集
表操作相关
创建表
复制表
条件
start with connect by,查询树结构
CASE WHEN THEN ELSE END,条件语句,支持嵌套
发布于 2023-09-21 15:03