数据库的使用01:数据库SQLserver和PLSQL的基本用法

目录

一、SQLserver

1.字段相关

 【字段=>表名】

【两字段=>共表】

【查看自增】

2.表相关

【表名=>字段】

【两表共有、独有字段查询】 

【基础增删改查&基础联表】

 【查询表的注释 & 表字段的注释】

【添加表的注释】

【更新表的注释】

【临时表的使用】

【表的存在性】

【根据视图名称查关联表】

3.变量

(1)直接声明

(2)查询赋值 

4.数据库相关

【数据库=>表名】

【所有表名称+表容量+表字段】

二、PLSQL(Oracle)

1.界面查询数据:

2.字段-表名互查

3.界面改数据

4.界面查看数据类型和字段

5.脚本增删改代码

(1)不存在该id则插入

(2)有关字段

       字段增加

         字段类型修改

6.换库查询

7.导出SQL语句

8.需要注意的点:

(1)数据被锁


一、SQLserver

1.字段相关

 【字段=>表名】

-- 注意左上角要选择对应的数据表查询

SELECT TABLE_NAME

FROM INFORMATION_SCHEMA.COLUMNS

WHERE COLUMN_NAME = 'colcunmname' AND TABLE_SCHEMA = 'dbo';

【两字段=>共表】

        查询:两个字段都出现在哪些表中

  • 求并集关键字:UNION
  • 求交集关键字:INTERSECT
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME = '字段A' AND TABLE_SCHEMA = 'dbo'
INTERSECT
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME = '字段B' AND TABLE_SCHEMA = 'dbo';

【查看自增】

方案一SSMS

  【右键表】-【设计】-【列属性】-【表示规范】查看,以下说明是自增

 

方案二SQL:查询自增的字段

SELECT 
    COLUMN_NAME 
FROM 
    INFORMATION_SCHEMA.COLUMNS 
WHERE 
    TABLE_NAME = '你的表名' AND 
    COLUMNPROPERTY(object_id(TABLE_SCHEMA + '.' + TABLE_NAME), COLUMN_NAME, 'IsIdentity') = 1;

【设置主键 or 联合主键】  

        【右键表】-【设计】-【点击字段】(按住CTRL可多选)-【右键】-【设置主键】

若提示超时,请用脚本:

ALTER TABLE 表名
ADD CONSTRAINT 主键名称 PRIMARY KEY (字段1,字段2);

如果不满足唯一性,考虑联合主键是否合理,若数据有误,可以groupby查条数,删除重复数据,比如下面可以帮你删除不满足唯一性的数据:

delete 表名 where id in (
	select min(id) from 表名 
	group by TimePoint,StationCode -- 你的主键
	having count(1)>1
)

2.表相关

【表名=>字段】

 -- 注意左上角要选择对应的数据表查询

【SQL server所有字段】

SELECT COLUMN_NAME, DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'TableName'

【SQL server主键字段】

SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_NAME = 'TableName'

【两表共有、独有字段查询】 

--查出两表共有字段
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = 'AAA'
INTERSECT
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = 'BBB';


--查出AAA表独有字段
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = 'AAA'
  AND COLUMN_NAME NOT IN (
    SELECT COLUMN_NAME 
    FROM INFORMATION_SCHEMA.COLUMNS 
    WHERE TABLE_NAME = 'BBB'
  );

【基础增删改查&基础联表】

-- 1.插入数据到表中,列名和值需要一一对应
INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...),(value1, value2, value3, ...);

-- 2.从表中删除满足条件的数据
DELETE FROM table_name WHERE condition;

-- 3.更新表中满足条件的数据
UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition;

-- 4.从表中查询满足条件的列
SELECT column1, column2, ... FROM table_name WHERE condition;

--5.从sc表中查询所有列,条件是cno在'c1', 'c2'之间,sal在1000和1500之间,score大于等于84,t是NULL,b不是NULL,时间在'2022-6-12 11:44:00'和'2022-6-12 11:45:59'之间
select * from sc where cno in('c1', 'c2') and (sal between 1000 and 1500) and score>=84 and t is NULL  and b is not NULL and time between '2022-6-12 11:44:00' and '2022-6-12 11:45:59';

--6.模糊匹配
select tno,tn from t where tn like '张%'; -- 表示匹配张%的数据,%的长度(0,∞)。
select tno,tn from t where tn like '张_'; -- 表示匹配张_的数据,_的长度是1。
select tno,tn from t where tn like '%张%'; -- 表示匹配含'张'的数据

--7.联表查询
SELECT Student.stu_id, Student.stu_name, Score.score FROM Student LEFT JOIN Score ON Student.stu_id = Score.stu_id;--左外连接:完整左表+匹配的右表字段(可能出现null)
SELECT Student.stu_id, Student.stu_name, Score.score FROM Student INNER JOIN Score ON Student.stu_id = Score.stu_id;--内连接:只返回匹配行(不会出现null)

快速生成增删改查语句:右键某表点击编写表脚本-选择对应语法-新查询编辑器窗口(select语法可直接点击选择前1000行生成) 

 【查询表的注释 & 表字段的注释】

SELECT value
FROM sys.extended_properties
WHERE major_id = OBJECT_ID('dbo.Prediction_3D_Stats')
  AND minor_id = 0
  AND name = 'MS_Description';
SELECT 
    t.name AS table_name,
    c.name AS column_name,
    ty.name AS data_type,
    ep.value AS column_description
FROM sys.tables t
INNER JOIN sys.columns c ON t.object_id = c.object_id
INNER JOIN sys.types ty ON c.user_type_id = ty.user_type_id
LEFT JOIN sys.extended_properties ep ON ep.major_id = c.object_id AND ep.minor_id = c.column_id AND ep.class = 1
WHERE t.name = 'IncomeTable'; -- 替换成你要查看的表名

SSMS:【右键表】-【设计】-【列属性】-【说明】查看注释 

【添加表的注释】

  --注意左上角要选用适当的数据库
  EXEC sys.sp_addextendedproperty 
    @name = N'MS_Description', 
    @value = N'你的注释语', 
    @level0type = N'SCHEMA', @level0name = N'dbo', 
    @level1type = N'TABLE',  @level1name = N'你的数据表名称', 
    @level2type = N'COLUMN', @level2name = N'你的字段名称';

【更新表的注释】

EXEC sys.sp_updateextendedproperty 
    @name = N'MS_Description', 
    @value = N'新的注释语', 
    @level0type = N'SCHEMA', @level0name = N'dbo', 
    @level1type = N'TABLE',  @level1name = N'你的数据表名称', 
    @level2type = N'COLUMN', @level2name = N'你的字段名称';

【临时表的使用】

打开一个窗口(查询会话),输入以下SQL

SELECT ID,NAME
INTO #TEMPTABLE
FROM Student

注释掉上面的SQL片段,写下以下SQL,发现可以查询到数据

SELECT * FROM #TEMPTABLE

若打开第二个查询窗口(查询会话),再写一遍上面这句sql,发现查不出数据(对象名 '#MMtable' 无效。)

【说明】

创建的临时表 #TEMPTABLE 只在该查询会话内有效,当关闭该会话窗口时,该临时表会被销毁

【表的存在性】

【表的存在性】sql查询某个表是否存在,存在返回1否则返回0

SELECT CASE 
    WHEN EXISTS (SELECT * FROM sys.tables WHERE name = '表名') 
    THEN 1 
    ELSE 0 
END AS TableExists;

【根据视图名称查关联表】

SELECT 
	referenced_entity_name
FROM 
    sys.sql_expression_dependencies
WHERE 
    referencing_id = OBJECT_ID('你的视图名称')
    AND referenced_class_desc = 'OBJECT_OR_COLUMN'
    AND referenced_server_name IS NULL
    AND referenced_database_name IS NULL;

【复制新表】

SELECT * INTO 新表名 FROM 旧表名;

3.变量

【注意】定义字符串Varchar必须指定长度,如不指定默认为1,导致查不到数据!

(1)直接声明

---- 定义变量并赋值
DECLARE @ProjectID Varchar(50) = 'E963F8E2-4713-4B7C-A154-CC4ED75A0CAA';
DECLARE @IsDeleted int = 0 ;

---- 使用变量查询数据
SELECT * FROM T_BU_ProjectManDay WHERE ProjectID = @ProjectID AND IsDeleted=@IsDeleted;

(2)查询赋值 

DECLARE @ALLCOUNT INT;
SELECT @ALLCOUNT = COUNT(*) 
FROM FLLottery 
WHERE CAST(time AS DATE) > '2010-01-01';

--后面SQL可使用@ALLCOUNT变量

4.数据库相关

【数据库=>表名】

【SQL server】-- 注意左上角要选择对应的数据表查询(以下SQL不需要修改)

SELECT name FROM sys.objects WHERE type = 'U' ORDER BY name; 

【所有表名称+表容量+表字段数量+表字段】

SELECT 
    t.name AS TableName,
    ep.value AS TableDescription,  -- 获取表的注释
    p.rows AS RowCounts,
    COUNT(c.column_id) AS FieldCount,
    STUFF((
        SELECT ',' + c.name
        FROM sys.columns c
        WHERE c.object_id = t.object_id
        FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '') AS Fields
FROM 
    sys.tables t
INNER JOIN sys.partitions p ON t.OBJECT_ID = p.OBJECT_ID AND p.index_id IN (0, 1)
LEFT JOIN sys.columns c ON t.object_id = c.object_id
LEFT JOIN sys.extended_properties ep ON ep.major_id = t.object_id AND ep.minor_id = 0 AND ep.name = 'MS_Description'
GROUP BY 
    t.name, p.rows, t.object_id, ep.value
ORDER BY 
    t.name;

5.视图相关

根据视图名称,查其关联的表、视图字段、视图建表语法

with details as (
SELECT 
    v.name AS ViewName,
    -- 获取涉及到的表(逗号分隔)
    STUFF((
        SELECT DISTINCT ',' + t.name
        FROM sys.sql_expression_dependencies sed
        INNER JOIN sys.tables t ON sed.referenced_id = t.object_id
        WHERE sed.referencing_id = v.object_id
        FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '') AS RelateTable,
    -- 获取字段(逗号分隔)
    STUFF((
        SELECT ',' + c.name
        FROM sys.columns c
        WHERE c.object_id = v.object_id
		order by c.column_id
        FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '') AS AllFeild,
	-- 获取视图的创建语法
    sm.definition AS CreateGrammar
FROM sys.views v
LEFT JOIN sys.sql_modules sm ON sm.object_id = v.object_id
LEFT JOIN sys.extended_properties ep ON ep.major_id = v.object_id AND ep.minor_id = 0 AND ep.name = 'MS_Description'
GROUP BY v.name, sm.definition, v.object_id
-- ORDER BY v.name
)
select * from details 
where ViewName ='视图名称'

二、PLSQL(Oracle)

1.界面查询数据:

模板套用方法:

2.字段-表名互查

【根据字段查表名】

SELECT TABLE_NAME
FROM ALL_TAB_COLUMNS
WHERE COLUMN_NAME = '字段名';

【根据表名查字段】

        快捷方式:

SELECT column_name
FROM all_tab_columns
WHERE table_name = '表名';

3.界面改数据

【记得修改数据或者执行脚本之后要点击提交或者回滚按钮】

4.界面查看数据类型和字段

5.脚本增删改代码

【记得修改数据或者执行脚本之后要点击提交或者回滚按钮】

(1)不存在该id则插入

-- 不存在该id则插入(insert语句由模板给出)

declare

  mCount int;

begin

select count(1) into mCount from emr_base_type where type_id ='3A0D14A655E50924E3334DA372202001';
if mCount=0 then
EXECUTE IMMEDIATE 'insert into emr_base_type (type_id, type_name, parent_id, is_leaf, sort_num, remarks, type_code, audit_level, file_owner, defcreateid, defcreatetime, defupdateid, defupdatetime, isdeleted, deleterid, deletiontime, is_enabled, multiple) values (''3A0D14A655E50924E3334DA372202001'', ''病案首页'', NULL, 0, 1, NULL, ''FrontPage'', 2, ''Doctor'', NULL, ''07-10月 -23 04.02.57.1793864 下午'', NULL, NULL, 0, NULL, NULL, 1, 1)';
end if;

select count(1) into mCount from emr_base_type where type_id ='3A0D14A655E50924E3334DA372202002';
if mCount=0 then
EXECUTE IMMEDIATE 'insert into emr_base_type (type_id, type_name, parent_id, is_leaf, sort_num, remarks, type_code, audit_level, file_owner, defcreateid, defcreatetime, defupdateid, defupdatetime, isdeleted, deleterid, deletiontime, is_enabled, multiple) values (''3A0D14A655E50924E3334DA372202002'', ''入院记录'', NULL, 0, 2, NULL, ''Resident'', 2, ''Doctor'', NULL, ''07-10月 -23 04.02.57.1793864 下午'', NULL, NULL, 0, NULL, NULL, 1, 1)';
end if;

end;

(2)有关字段

       字段增加
declare
  mCount int;
begin
     select count(1) into mCount from user_tab_columns t where t.table_name = upper('emr_emp_assist')  and t.column_name = upper('IS_ENABLED');
  if mCount=0 then 
    EXECUTE IMMEDIATE 'alter table emr_emp_assist  add( IS_ENABLED number(1) null) ';
 end if;  
end;
         字段类型修改
declare
  mCount int;
begin
     select count(1) into mCount from user_tab_columns t where t.table_name = upper('emr_emp_diagnose')  and t.column_name = upper('SORT_NUM');
  if mCount=1 then 
    EXECUTE IMMEDIATE 'alter table emr_emp_diagnose  modify( SORT_NUM number(8)) ';
 end if;  
end;

6.换库查询

7.导出SQL语句

8.需要注意的点:

(1)数据被锁

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值