目录:
数据操作语句:
从B表将数据关联项写入A表:
update A a set a.col_name = (select b.col_name from b where b.col_code=a.col_code) where a.col_code is not null;
update A a left join B b ON (a.col_code=b.col_code) where a.col_code is not null;
insert into users(user_code) select 'A00001' from dual where not exists(select id cn from users where user_code='A00001'); // 如果数据不存在时写入,否则不写入
insert into users(user_code) values('A00001') ON DUPLICAL KEY UPDATE; //写入如果冲突则执行更新操作,注意高并发下可能会死锁,仅MYSQL有
sql语句
SELECT * FROM V$reserved_words;--查询oracle预留关键字
SELECT * FROM V$version;--查询oracle版本
select b.owner,b.object_name,a.session_id,a.locked_mode from v$locked_object a,dba_objects b where b.object_id = a.object_id; --查看被锁的表名
SELECT * FROM user_col_comments WHERE table_name='****'; --查询表的列 ,表名区分大小写
select * from user_tab_comments;----查询所有表
select * from user_tab_comments where Table_Name='****';----查询某一个表的名称及备注
-- 创建主键
ALTER TABLE USER ADD CONSTRAINTS pk_user PRIMARY KEY(user_id);
ALTER TABLE USER DROP CONSTRAINTS pk_user;
--列修改
- alter table [tablename] modify [column] varchar2(100);
- alter table [tablename] add [column] varchar2(100);
- alter table [tablename] rename column [column1] to [column2] ;
- alter table [tablename] modify [columnname] null; 允许为null值修改
- alter table [tablename] add column `MODIFY_TIME` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '当前更新时间'; // 添加更新时间会对数据的操作直接更新时间,无需传入。
--关闭和开启触发器(用于导入数据时使用)
alter table user disable all triggers;
alter table user enable all triggers;
--加注释
COMMENT ON TABLE USER IS '用户表';
COMMENT ON COLUMN USER.USER_ID IS '主键';
--加索引
create index [idx_name] on [tablename]([colname] asc) ;
create unique index [idx_name] on [tablename]([colname] asc) ;
sql命令语句
- prompt
- set feedback off/on
- set define off/on
prompt :
提示的意思:
prompt helloworld
将在执行台打出helloworld
set feedback off/on(默认)
用于设置是否有回执,我们在插入表数据时会有 1 rows inserted....,设置为off则不显示,加快执行速度。
set define off/on(默认)
在SQL*Plus中默认的"&"表示替代变量,只要在命令中出现该符号,SQL*Plus就会要你输入替代值。
这就意味着你无法将一个含有该符号的字符串输入数据库或赋给变量。
set define off 关闭替代变量。
set define $ 用$代替&为替代常量。
关键字
- DISTINCT
- WITH
- UNION
- FUNCITON_CONCAT(str1,str2,str3)
- IN
WITH:
With
A as(select * from a where a.name='denny'),
B as(select * from b where b.name='zhang')
select A.*,B.* from A,B where A.name = B.name;
在plsql某些版本使用with查询不到结果,有人说是plsql的bug。在Mysql中没有With的用法,其它数据库都有。With多用于复杂查询语句的嵌套或者是查询结果union用。
UNION:
SELECT emp_id,emp_name FROM emp WHERE emp_name = '张三'
UNION
SELECT emp_id personID,emp_name oaName FROM emp WHERE emp_name = '李四'
UNION ALL
SELECT emp_id person,emp_name oo FROM emp WHERE emp_name = '张三';
union中的字段数和类型要求一致,最后的结果的字段名使用第一个select的字段名UNION默认会剔除重复数据,且对结果进行排序,而UNION ALL 不做此项处理,仅对结果进行罗列。因此从性能上union all 要优于union。
FUNCITON_CONCAT(str1,str2,str3):
concat中不能存在null值,不然所有结果都为null.
DISTINCT:
DISTINCT 只能剔除所有要查询的列中一样的数据,不能查询单个列重复数据。
例: select distinct user_id,user_name,user_type from user; user_id,user_name,user_type3个列的数据都同时相同的数据才会被剔除,而非单个列中存在重复数据。
同时DISTINCT要放置在所有查询列之前,而不能放在列中,因为它是对所有列起作用,而非单个列。
select distinct user_id,user_name √
select user_id,distinct user_name ×
select count(distinct user_name) from user; √
IN:
in 要注意最大长度是1200,超过这个in就执行不了。
如果要对in进行排序,则 order by field(col_name,'值1','值2','值3');
explain:
用于查看sql的执行情况,可以分析判断sql的执行性能,用于调优。
字符集编码:
mysql 在查询数据时,如果 采用 ci 模式则不区分大小写,因此对于查询出来的数据,如果大小写敏感的话,会出现多条数据。
*_bin: 表示的是binary case sensitive collation,也就是说是区分大小写的
*_cs: case sensitive collation,区分大小写
*_ci: case insensitive collation,不区分大小写
因此建立表和表字段时要注意。尤其要看表字段的字符集设置大于表的设置。建议先建立空表保存,然后再修改方式添加表字段,这样就统一了。
utf8_bin , utf8_genarate_cs, utf8_genarate_ci
varchar长度:
在mysql中,varchar的长度
4.* 使用字节码表示, 5.* 及以后使用字符数,因此不牵扯中英文长度占字节数问题。
在 oracle中, varchar的长度要考虑字节码长度,utf-8, gbk等所占据的长度不同。