sql学习,包含sqlserver、mysql、oracle

----------------------------------------------sqlserver

select * from Table_Test

select top 3 Id from Table_Test /*测试查询最大条数*/

/*insert into Table_Test(Id, Name, Num, Sex) VALUES(8, 'ASDASF', 123456, '男')*/

select Name from Table_Test

select * from Table_Test where Name Like '%D%'/*模糊查询*/

select * from Table_Test where Name Like 'D%'

select * from Table_Test where Name Like '%D'

select * from Table_Test where Name Like '__D'/*_  代表一个字符*/

select * from Table_Test where Name Like '_D_'/*_  代表一个字符*/

select * from Table_Test where Name IN('aaa', 'bbb', 'ddd')/*多条件*/

select * from Table_Test where Name BETWEEN 'aaa' AND 'e'/*BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期*/

select * from Table_Test1

select Table_Test.Id, Table_Test1.Id from Table_Test INNER JOIN Table_Test1 ON Table_Test.Id = Table_Test1.Id/*多表查询

INNER JOIN:如果表中有至少一个匹配,则返回行

LEFT JOIN:即使右表中没有匹配,也从左表返回所有的行

RIGHT JOIN:即使左表中没有匹配,也从右表返回所有的行

FULL JOIN:只要其中一个表中存在匹配,则返回行*/

select Table_Test.Id, Table_Test1.Id from Table_Test LEFT JOIN Table_Test1 ON Table_Test.Name = Table_Test1.Name

select Table_Test.Id, Table_Test1.Id from Table_Test LEFT JOIN Table_Test1 ON Table_Test.Id > Table_Test1.Id

select * from Table_Test UNION select * from Table_Test1/*合并多个表查询结果*/

/* 复制表数据插入新表

SELECT *

INTO newtable [IN externaldb]

FROM table1;

复制指定列插入新表

SELECT column_name(s)

INTO newtable [IN externaldb]

FROM table1;*/

/*从一个表中复制所有的列插入到另一个已存在的表中

INSERT INTO table2

SELECT * FROM table1;

只复制希望的列插入到另一个已存在的表中

INSERT INTO table2

(column_name(s))

SELECT column_name(s)

FROM table1;*/

/// 索引

select * from Lerning_test

select * from Lerning_test where CaiLiaoName = 'sdfgds'

CREATE INDEX Lerning_test_Id ON Lerning_test(Id)

select * from Lerning_test where Id = '1234' and CaiLiaoName = 'cailiao12'

CREATE INDEX Lerning_test_Id_CaiLiaoName ON Lerning_test(Id, CaiLiaoName)

CREATE INDEX Lerning_test_CaiLiaoName ON Lerning_test(CaiLiaoName)

--查看使用情况

EXPLAIN

SELECT * FROM Lerning_test

WHERE Id = '1234' and CaiLiaoName = 'cailiao12'

select * from Lerning_test where Id=upper('123');

SELECT * FROM sys.sysindexes

WHERE id=object_id('Lerning_test')

insert into Lerning_test(CaiLiaoName, XingHao, DanZuShu, DanWei, ZhongShu, LingYongShu, TuiHuanShu, TuiHuanRiQi)

values('sdfgds', 'sdfs', 'sdfss', 'sdfdsf', 'sdf', 'sdfd', 'sdfd', 'sdfsdf')

drop index Lerning_test_CaiLiaoName on Lerning_test

sqlseever 触发器

/*create trigger Test_insert

on Table_Test

after insert

as

begin

    if object_id(N'Table_Test',N'U') is null--判断student_sum表是否存在

        create table Table_Test(stuCount int default(0));--创建存储学生人数的student_sum表

    declare @stuNumber int;

    select @stuNumber = count(*)from Table_Test;

    if not exists (select * from Table_Test)--判断表中是否有记录

        insert into Table_Test(Name, Password, emil) values('123', 'test', 'test')

    update Table_Test set emil = @stuNumber; --把更新后总的学生数插入到student_sum表中

end*/

create trigger Test_Select

on Table_Test1

FOR update

as

begin

    if object_id(N'Table_Test',N'U') is null--判断student_sum表是否存在

        create table Table_Test1(stuCount int default(0));--创建存储学生人数的student_sum表

    declare @stuNumber int;

    select @stuNumber = count(*)from Table_Test;

    if not exists (select * from Table_Test1)--判断表中是否有记录

        insert into Table_Test1(Name, Password, emil) values('123', 'test', 'test')

    update Table_Test1 set emil = '这是更新数据的插入'; --把更新后总的学生数插入到student_sum表中

end

update Table_Test set emil = '';

insert into Table_Test(Name, Password, emil) values('123', 'test', 'test');

//存储过程书写   mysql

create PROCEDURE test()

BEGIN

SELECT NAME from test;

END

----------------------------------------------------------------

CREATE PROCEDURE test(in sum INT)//不区分大小写

BEGIN

SELECT name from test WHERE id = sum;

//set sum = 10;//内部参数值会被改变

END

----------------------------------------------------------------

CREATE PROCEDURE test(out result int)

BEGIN

SELECT COUNT(*) INTO result FROM test;

END

SELECT COUNT(*) FROM test;

SELECT @result;

CALL test(@result);

SELECT @result;//得到结果

----------------------------------------------------------------

CREATE PROCEDURE test (IN sum INT, OUT result INT)

BEGIN

SELECT

COUNT(*) INTO result

FROM

test

WHERE

id = sum;

END

SET@id = 1;

CALL test(@id, @result);

SELECT @result;

----------------------------------------------------------------

CREATE PROCEDURE TEST (INOUT in_out INT)

BEGIN

SELECT

COUNT(*) INTO in_out

FROM

test

WHERE

1 = in_out;

END

set @id = 1;

CALL test(@id);

SELECT @id;

----------------------------------------------------------------

if _ then _ elseif/else end if _ ;

CREATE PROCEDURE inser (

INOUT _name VARCHAR (50),

INOUT emil VARCHAR (50)

)

BEGIN

DECLARE

temp INT;

SELECT

COUNT(*) INTO temp

FROM

test

WHERE

NAME = _name;

IF temp > 0 THEN

SET _name = 2;

ELSE

SET _name = 5;

END

IF;

SELECT

_name;

END

set @name = 'xxx';

set @emil = 'xxx';

CALL inser(@name, @emil);

----------------------------------------------------------------

case _ when _ then _ end case;

DROP PROCEDURE

IF EXISTS inser;

/*如果存在则先删除*/

CREATE PROCEDURE inser (

INOUT _name VARCHAR (50),

INOUT emil VARCHAR (50)

)

BEGIN

DECLARE

temp INT;

SELECT

COUNT(*) INTO temp

FROM

test

WHERE

NAME = _name;

IF temp > 0 THEN

SET _name = 2;

ELSE

SET _name = 5;

END

IF;

CASE _name

WHEN 2 THEN

SET _name = 1;

WHEN 5 THEN

SET _name = 0;

END CASE;

/*相当于while循环*/

WHILE _name = 1 DO

SET _name = 10;

END

WHILE;

WHILE _name = 0 DO

SET _name = 20;

END

WHILE;

/*相当于do-wehile循环*/

REPEAT

SET _name = _name + 1;

UNTIL _name = 30

END

REPEAT

;

loop_l: LOOP

SET _name = _name + 1;

IF _name = 40 THEN

/*离开循环 BREAK*/

LEAVE loop_l;

ELSE

/*循环继续  CONTINUE*/

ITERATE loop_l;

END

IF;

END

LOOP

;

SELECT

_name;

END

set @name = 'xxx';

set @emil = 'xxx';

CALL inser(@name, @emil);

------------------------------------------------------

-- 查看数据库里的存储过程

SELECT

*

FROM

mysql.proc

WHERE

db = 'test';

-- 这个语句是MySQL的扩展,它返回子程序的特征,如数据库、名字、类型、创建者及创建和修改日期。PROCEDURE和FUNCTION分别表示查看存储过程和函数

SHOW PROCEDURE STATUS

WHERE

db = 'test';

--查看存储过程

SHOW CREATE PROCEDURE inser

----------------------------------------------------------

----------------------------------------------redis缓存

exists key 测试指定key是否存在

del key1 key2 ⋯ keyN 删除指定的key

type key 返回给定key的value类型

keys pattern 返回匹配指定模式的所有key keys * * 代表所有,?代表一个字符

rename oldkey newkey 改名字

dbsize 返回当前数据库key数量

expire key seconds 为key指定过期时间

ttl key 返回key剩余的过期秒数

select db-index 选择数据库

move key db-index 将key从当前数据库移动到指定数据库

flushdb 删除当前数据库中所有key

flushall 删除所有数据库中的所有的key

dump key 序列化指定key,并返回序列化的值

pttl key 以毫秒为单位返回key的剩余的过期时间

persist key 移除key的过期时间,key将持久保存

key名称不区分大小写

String 是redis的最基本的数据类型,一个key对应一个value。

String类型是二进制安全的,意思是redis的String可以包含任何数据。比如jpg图片或者序列化的对象。

String类型是redis最基本的数据类型,一个键最大能存储512Mb

二进制安全是指:在传输数据时,保证二进制数据的信息安全,也就是不被篡改,破译等,如果被攻击,能够及时检测出来。

二进制安全的特点:

1.编码,解码发生在客户端完成,执行效率高

2.不需要频繁的编解码,不会出现乱码。

------------------------------------

//只有在key不存在时设置key的值才能成功

setnx key value

//返回给定key的value类型

type key

//用于获取存储在指定key中字符串的子串   getrange keyname 0 1

GETRANGE key start end

//获取所有(一个或多个)指定key的值   mget keyname1 keyname2

MGET key1 [key2...]

//GETSET命令用于设置指定key的值,并返回key的旧值,当key不存在时,返回nil。

GETSET key_name value

//返回key所储存的字符串值的长度。

STRLEN key

//删除语法

DEL key_name

//INCR命令将key存储的数字值增1,如果key不存在,那么key的值会先初始化为0,然后再执行incr操作

INCR key_name

//incrby命令将key中存储的数字加上指定增量

INCRBY key_name 增量

///减量

DECR key_name或DECRBY key_name

//append命令用于为指定的key追加至末尾,如果不存在,为其赋值。

APPEND key_name value

/HASH  存储数据

///String类型通常用于保存单个字符串或JSON字符串数据

///因为String是二进制安全的,所以你完全可以把一个图片文案的内容作为字符串来存储。

///计数器

//存储值

HSET key FILED value

HMSET KEY FILED VALUE [FILED1,VALUE1]

//得到值

HGET key FILED

//返回HASH表中所有字段和值

HGETALL key

//获取所有哈希表中的字段

HKEYS key

//获取哈希表中字段的数量

HLEN key

//删除一个或多个HASH表字段

HDEL KEY field[field1]

//只有在字段不存在时,设置hash表字段值

HSETNX key field value

//为哈希表key中指定字段的整数加上增量increment

HINCRBY key field increment

//为哈希表key中指定字段的浮点数加上增量increment

HINCRBYFLOAT key field increment

//查看哈希表key中,指定的字段是否存在

HEXISTS key field

----------------------------------------------------------------ORACLE 数据库操作

-------添加表

create table studentinfo(

       studentid number(2) primary key,

       studentname varchar(10) not null,

       studentsex char(2) check(studentsex='男' or studentsex='女'),

       studentage number(2) not null,

       studenttel number(11) unique,

       studentaddress varchar(50) default '上海',

       classid number(2) references classinfo(classid)

       );

--alter table TEST ADD(REM VARCHAR(500));alter table TEST DROP COLUMN NAME  修改列 删除列

--select * from user_tab_columns  where table_name = 'TEST'; 查看表结构   desc table_name

--alter table student modify(stu_id number(4));修改字段         【alter table 表名 modify(属性)】

--alter table test modify(Id number(20));整形数据修改

--drop table  表名;删除表

--Insert into 表名(属性) values(属性值);插入数据

--update 表名 set 字段名='修改后的值' where 限制条件;更新数据

--select 字段 from 表名/视图名 where 条件 group by (字段) having 条件 order by 字段   查询分组语句

------分配权限

grant connect ,resource,dba to user_name;

--connect   是链接数据库权限,可以对数据库进行增删改查

--resource  资源使用权限,用来创建表格

--dba  是数据库管理员权限

--查询权限

grant create session to

grant create table to "xiaofei"          --给用户赋予表操作的权限

grant unlimited tablespace to  "xiaofei"     --给用户赋予表空间操作的权限

grant select any table to "xiaofei"         --给该用户赋予访问任务表的权限   同理可以赋予update 和delete 的

-------创建用户

create  user user_nameidentified by password;

--创建用户名为user_name为laowang设置用户密码password

alter  user "xiaofei" identified by ---修改密码

-------回收权限

revoke connect,resource from user_name;

--revoke    --回收

--connect,rescource   --创建以及查询等权限

--from    --从谁哪里回收  

--加锁:  alter  user user_name account lock;

--解锁:  alter  user user_name account unlock;      

--increment by 1

--start with 1

--minvalue 1

--maxvalue 999999999

--nomaxvalue

--nocycle

--nocache

oracle建立自增的步骤

1.建表

2.create sequence test_id_increment increment by 1 start with 1 nomaxvalue nocycle nocache  //创建序列

3.创建触发器

--create or replace trigger test_id_increment_trigger

--before insert on test  --before:执行DML等操作之前触发

--for each row  --行级触发器,-- WHEN (new.ID is null) 设置主键存在时,不触发触发器

--begin

-- select test_id_increment.nextval into :new.id from dual;

--end;

before:能够防止某些错误操作发生而便于回滚或实现某些业务规则,适用于实现自增字段;

after:在DML等操作发生之后发生,这种方式便于记录该操作或做某些事后处理信息;

-- 更改序列  test_id_increment

alter sequence test_id_increment

    increment by 2 

    minvalue 1

    maxvalue 999999999;

--获取序列自增ID --

select test_id_increment .Nextval 自增序列ID from dual;

-- 删除序列 --

drop sequence test_id_increment

--调用序列,插入Student数据 --

insert into Student(stuId,Stuname) values(test_id_increment .Nextval,'张三');

------------------------------

select user from dual;//查询当前连接用户

select * from product_component_version;//查询当前版本

//解锁未commit的语句进程id

SELECT object_name, machine, s.sid, s.serial#

FROM gv$locked_object l, dba_objects o, gv$session s

WHERE l.object_id = o.object_id

AND l.session_id = s.sid and object_name = 'DOCBOX'

select s.sid, s.serial# from v$locked_object lo, dba_objects ao, v$session s where ao.object_id = lo.object_id and lo.session_id = s.sid

alter system kill session '2003, 17309';

alter system kill session '2723, 33342';

alter system kill session '2003, 17309';

alter system kill session '1303, 5529';

//删除重复的数据

select*  from bdcinfo.xs_dyaq where (bdcdyh) in (select bdcdyh from bdcinfo.xs_dyaq group by bdcdyh having count(bdcdyh) >1) and rowid not in (select min(rowid) from bdcinfo.xs_dyaq group by bdcdyh having count(*)>1) and ywh='202005190004507'

//查询回话

select username,serial#, sid from v$session;  ---查询用户会话

select count(*) from v$session;

select count(*) from v$session where status='ACTIVE';

select value from v$parameter where name = 'processes';

select username,count(username) from v$session where username is not null and status='ACTIVE' group by username;

select * from v$session where status='ACTIVE' order by username

//添加字段

alter table bi_trade_info add(LEAGUER_TYPE NUMBER(1));

//去重

DELETE from limit_user WHERE (func) IN ( SELECT func FROM limit_user GROUP BY func HAVING COUNT(func) > 1) AND ROWID NOT IN (SELECT MIN(ROWID) FROM limit_user GROUP BY func HAVING COUNT(*) > 1);

///前后去0

select ltrim(rtrim(to_char('00.3400','99990.000'),'0')) l from dual

SELECT OWNER, TABLE_NAME AS "表名", COMMENTS AS "表注释"  FROM  ALL_TAB_COMMENTS where owner = 'NETOBDC' ORDER BY TABLE_NAME

------查询出所有表,导出Excel ,作为基表存在

select

    B.TABLE_NAME AS "F表名",

    C.COMMENTS AS "表说明",

    B.COLUMN_ID AS "字段序号",

    B.COLUMN_NAME AS "字段名",

    B.DATA_TYPE AS "字段数据类型",

    A.COMMENTS AS "字段描述"

FROM

    ALL_COL_COMMENTS A,

    ALL_TAB_COLUMNS B,

    ALL_TAB_COMMENTS C

WHERE

    A.TABLE_NAME IN (SELECT U.TABLE_NAME FROM USER_ALL_TABLES U)

    AND A.OWNER = B.OWNER

    AND A.TABLE_NAME = B.TABLE_NAME

    AND A.COLUMN_NAME = B.COLUMN_NAME

    AND C.TABLE_NAME= A.TABLE_NAME

    AND C.OWNER = A.OWNER

    AND A.OWNER = 'NETOBDC'

/*   AND A.TABLE_NAME = 'ABNORMAL_TRAN_MONITOR'*/

ORDER BY A.TABLE_NAME ,B.COLUMN_ID

-----查询出所有表名称和每个表内容,导出Excel ,供之后使用宏拆分

--天

select TO_NUMBER(to_char(TO_NUMBER(TO_DATE(to_char(sysdate + 1, 'yyyy-mm-dd'),'yyyy-mm-dd hh24:mi:ss')- TO_DATE('2021-10-09 11:20:01','yyyy-mm-dd hh24:mi:ss')), '000.9'))

AS days from dual;

--时

select TO_NUMBER(to_char(TO_NUMBER((TO_DATE((select to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss') ti from dual),'yyyy-mm-dd hh24:mi:ss')- TO_DATE('2021-10-20 9:13:20','yyyy-mm-dd hh24:mi:ss'))*24), '999'))

AS mons from dual;

--分

select TO_NUMBER(to_char(TO_NUMBER((TO_DATE((select to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss') ti from dual),'yyyy-mm-dd hh24:mi:ss')- TO_DATE('2021-10-20 10:16:20','yyyy-mm-dd hh24:mi:ss'))*24*60), '999'))

AS mins from dual;

--秒

select TO_NUMBER((TO_DATE((select to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss') ti from dual),'yyyy-mm-dd hh24:mi:ss')- TO_DATE('2021-10-20 11:15:20','yyyy-mm-dd hh24:mi:ss'))*24*60*60)

AS secs from dual;

//恢复数据

insert into sys_dictionary

//时间戳

Select * From  sys_dictionary As Of   timestamp to_timestamp('2021-11-10 17:00:00','yyyy-mm-dd hh24:mi:ss')

//导出数据字典

SELECT ROWNUM 序号,

       A.COLUMN_NAME AS "字段名称",

       B.comments AS "字段描述",

       A.DATA_TYPE as 字段类型,

       REPLACE(DECODE(A.CHAR_LENGTH,

                      0,

                      DECODE(A.DATA_SCALE,

                             NULL,

                             A.DATA_TYPE,

                             A.DATA_PRECISION || ',' || A.DATA_SCALE),

                      A.CHAR_LENGTH),

               ',0',

               '') 字段长度,

       REPLACE(REPLACE(A.NULLABLE, 'Y', '√'), 'N', '') AS "能否为空",

       A.DATA_DEFAULT AS "默认值"

  FROM sys.all_tab_columns A, sys.DBA_COL_COMMENTS B

WHERE A.owner = B.owner

   AND A.table_name = B.table_name

   AND A.COLUMN_NAME = B.COLUMN_NAME

   --AND A.owner = '用户名'

   AND A.TABLE_NAME IN ('UT_SMS')

ORDER BY A.TABLE_NAME

select s.*, s.rowid FROM sys.all_tab_columns A, sys.DBA_COL_COMMENTS B

select s.* from sys.all_tab_columns S where s.table_name = 'ST_SMS_SETTING'

//创建函数索引

create index index_tonumber_iid on  SYS_HJYW_REPINFO(to_number(IID));

//字符合并拆分

select replace(wm_concat(value), ',', '/')

  from sys_dictionary s

where category = '房屋用途'

   and name in

       (select s.*

          from table (Select Split('住宅/办公', '/') As sss From Dual) s)

//误删恢复

insert into ARCHIVES.ZTXX 

SELECT * FROM ARCHIVES.ZTXX  as of timestamp to_timestamp('2022-04-21 9:50:00','yyyy-MM-dd hh24:mi:ss') WHERE YWBH = '202203298000949'

//循环解除锁表

declare

strSql varchar(500);

begin

for r in (select distinct t2.sid,t2.serial#,t2.logon_time,object_name  from v$locked_object t1,v$session t2,dba_objects t3  where t1.session_id=t2.sid and t1.OBJECT_ID=t3.OBJECT_ID and  object_name='DJ_SQ_H' ) loop

  strSql := 'alter system kill session '''||r.sid||','||r.serial#||'''';

  execute immediate strSql;

end loop;

end;

//创建oralce数据库sql运行快照

call dbms_workload_repository.create_snapshot()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值