目录
一、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;