有次笔试最后一页的三个数据库连接查询,没有写出来,被考官暗讽了下。现在想来,实习初,确实很LOW。现公司刚入职的时候,负责过ETL方面,所以和数据库打了不少交道,五十行的联合查询、上百行的存储过程很常见,游标、视图、索引频频接触,包括在SQL中断点调试,测值等等,在这里将所接触所了解的进行整理,做一个小总结,慢慢的积累,对游标、视图等等也做一个简单的说明。我有时候遇到相同问题,会出现忘记上次是如何解决问题的情况,直到花费大量的时间、精力去重新找到解决方案。这很浪费,所以凡是遇到的问题,所做解决的方案,我强迫自己写个备注,将大致思路进行汇总整理,以方便自己及时回顾。毕竟好记性不如烂笔头,古人诚不欺我也!

1、数据库常见三种数据模型: 层次、网状、关系

2、关系的 三类完整性约束:实体完整性(主键不为空)、参照完整性、用户自定义完整性

3、常用易忘数据类型:

①int  4byte = 32bit   一个汉字2字节,中文标点、全角占两字节;字母、英文标点、半角占一个字节

②char        固定长度的非unicode 字符数据,最大长度为8000个字符

③varchar    可变长度的非unicode 字符数据,最大长度为8000个字符,存储大小为输入数据的实际长度

④nchar       固定长度的unicode 字符数据,最大长度为4000个字符,存储大小为实际长度的两倍

⑤nvarchar  可变长度的unicode 字符数据,最大长度为4000个字符,存储大小为实际长度的两倍

4. 查询31到40条记录(面试)

--id连续
SELECT * FROM IBBC.dbo.Students AS s WHERE s.Stu_id BETWEEN 31 AND 40 --id不连续
--普快
SELECT TOP 10 * FROM Students AS s WHERE s.Stu_id NOT IN (SELECT TOP 30 s2.Stu_id FROM Students AS s2)
--动车
SELECT TOP 10 * FROM (SELECT TOP 40 * FROM IBBC.dbo.Students AS s ORDER BY s.Stu_id ASC) AS temp ORDER BY temp.Stu_id DESC
--高铁
SELECT * FROM (SELECT ROW_NUMBER() OVER (ORDER BY s.Stu_id) Newcolumn,* FROM Students AS s)s1 WHERE s1.Newcolumn BETWEEN 31 AND 40 --蹦蹦车 易混淆 实际查询的是最后十条记录的降序
SELECT TOP 10 * FROM (SELECT TOP 40 * FROM IBBC.dbo.Students AS s) AS temp ORDER BY temp.Stu_id DESC

5、常见的判断操作

--判断表是否存在
IF exists(select * from dbo.sysobjects where id = object_id(N'[dbo].[Table_22]')) --判断表栏位是否存在
IF EXISTS (select * from syscolumns where id=object_id('Table_1') and name='IDD') --判断存储过程是否存在
If exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[test]')) --判断视图是否存在
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[v_test]'))

6、常见的表操作

--增加栏位
ALTER TABLE IBBC.dbo.Table_1 ADD YYY CHAR(5)
--删除栏位
ALTER TABLE IBBC.dbo.Table_1 DROP COLUMN YYY
--更改栏位类型型
ALTER TABLE IBBC.dbo.Table_1
ALTER COLUMN b_id INT NOT NULL --重命名栏位
EXEC sp_rename 'TableName.ColumnName', 'NewColumnName', 'column' --指定栏位添加描述
exec sp_addextendedproperty N'MS_Description', N'我是描述信息', N'user', N'dbo', N'table', N'Table_1', N'column', N'YYY' --添加主键
ALTER TABLE IBBC.dbo.Table_2 ADD CONSTRAINT test_main PRIMARY KEY(b_id)
--删除主键
ALTER TABLE IBBC.dbo.Table_2 DROP CONSTRAINT test_main --添加外键
alter table IBBC.dbo.Table_1 add constraint test_foreign foreign key(bas_id) references IBBC.dbo.Table_2(b_id)
--删除外键
ALTER TABLE IBBC.dbo.Table_1 DROP CONSTRAINT test_foreign --设计器修改后保存失败: 工具->选项->设计器->表和数据库设计->保存时拒绝修改数据设计内容(取消勾选)

7. 常用查询操作

--case when then
SELECT s.Stu_id,s.Stu_Name,s.Date_,
(CASE s.Stu_id
WHEN 1 THEN DATEADD(mm,1,s.Date_)
WHEN 2 THEN DATEADD(mm,-1,s.Date_)
ELSE DATEADD(mm,2,s.Date_)
END) New_date
FROM IBBC.dbo.Students AS s --日期函數
SELECT DATEPART(yy,GETDATE()) AS 'Year' --yy/yyyy/yy
SELECT DATEPART(mm,GETDATE()) AS 'Month' --mm/m/Month
SELECT DATEPART(ww,GETDATE()) AS 'Week' -- ww/wk/Week --日期轉換為字符串
SELECT CONVERT(VARCHAR,GETDATE(),112) --標準字符串转换为日期 20080808
SELECT CASt('2003-02-02' AS DATETIME)
--部分字符串转换为日期
select convert(datetime,substring('',1,4)+'-'+substring('',5,2)+'-1') --类型转换
SELECT CONVERT(VARCHAR(8),GETDATE(),112)
SELECT CAST (GETDATE() AS VARCHAR(11)) --查询栏位值为null的数据
select * from table where column is null;
--查询栏位值为''的数据
select * from table where column = '';

8. 聚合函数

--当前顺序 where -> group by -> having 函数 -> order by
--SQl顺序 from -> Join on -> where -> group by -> having -> select -> distinct -> order by -> top
--聚合函数 分组
select s.StudentName,sum(grade) as '总成绩' from IBCC.dbo.Student s group by s.StudentName --having 对聚合函数查询后的结果集进行筛选
select s.StudentName, sum(grade) as '总成绩' from ibcc.dbo.Student s group by s.StudentName having sum(grade)>100

9. 视图

--视图 虚拟表
use IBCC
go
--创建
create view view_test as
select * from IBCC.dbo.Student where grade >80
go
--查询
select * from ibcc.dbo.view_test
--删除 不能指定数据库名为前缀
drop view dbo.view_test

10.存储过程

--不带参数的存储过程
--创建
create proc proc_test
as
select * from ibcc.dbo.Student
go --带参数的存储过程
--创建
create proc proc_test1 @s_id int
as
select * from IBCC.dbo.Student where StudentID=@s_id
go
--调用
exec proc_test1 1002
exec proc_test1 @s_id =1002
--删除
drop proc proc_test1

11. 事务

--一段SQl中途执行失败,可回滚至员状态,eg:转账、删除、更新等操作
BEGIN TRAN --开始事务
DECLARE @b INT;
SET @b = 0;
DELETE FROM A ...
DELETE FROM B ...
DELETE FROM C ... IF(@b>0)
BEGIN COMMIT TRAN --提交事务
END
ELSE
BEGIN
ROLLBACK TRAN --回滚事务
END END

SQL常用语句整理的更多相关文章

  1. 【数据库】 SQL 常用语句

    [数据库] SQL 常用语句 1.批量导入 INSERT INTO Table2(field1,field2,...) SELECT value1,value2,... FROMTable1 要求目标 ...

  2. 【数据库】 SQL 常用语句之系统语法

    [数据库] SQL 常用语句之系统语法 1. 获取取数据库服务器上所有数据库的名字 SELECT name FROM master.dbo.sysdatabases 2. 获取取数据库服务器上所有非系 ...

  3. SqlServer常用语句整理

    先记录下来 以后整理 1.常用语句 1.1update连表更新 update a set a.YCaseNo = a.WordName + '['+ convert(varchar,a.CaseYea ...

  4. SQL常用语句之数据库的创建、删除以及属性的修改-篇幅1

    本篇文章主要总结了SQL Server 语句的使用和一些基础知识,因为目前我也正在学习,所以总结一下. 要使用数据库语句,首先就要知道数据库对象的结构: 通常情况下,如果不会引起混淆,可以直接使用对象 ...

  5. Mysql常用语句整理

    把工作常用的mysql命令整理一下,省的用的时候在到处找 1.常用命令 1.1 登录 mysql -u root -p 1.2 生成随机数 若在 i<=R<=j 范围内生成随机数 FLOO ...

  6. SQL常用语句,随时用随时更新

    更多详细说明文档查询 http://www.postgres.cn/docs/9.5/infoschema-columns.html 1.1通过表名查询表的属性 SELECT * FROM sys.s ...

  7. SQL常用语句(二)

    --语 句 功 能--数据操作SELECT --从数据库表中检索数据行和列INSERT --向数据库表添加新数据行DELETE --从数据库表中删除数据行UPDATE --更新数据库表中的数据 --数 ...

  8. ORACLE数据库 常用命令和Sql常用语句

    ORACLE 账号相关 如何获取表及权限 1.COPY表空间backup scottexp登录管理员账号system2.创建用户 create user han identified(认证) by m ...

  9. SQL 基础语句整理

    SQL教程 SELECT 语句 SELECT * FROM 表名称 DISTINCT 语句 SELECT DISTINCT 列名称 FROM 表名称 SELECT LastName,FirstName ...

随机推荐

  1. JSP 简介

      160901   1. 一句话介绍什么是JSP? 和java相关的技术,可以开发出动态的,高性能的Web应用程序,的一门开发语言   2. 优点即特点,那么jsp的优点有哪些呢? JSP实现的We ...

  2. 《实战Java虚拟机》,最简单的JVM入门书,京东活动,满200就减100了,该出手了

    #京东满200—100单# 图书放血大卖了 <实战Java虚拟机>http://item.jd.com/11670385.html 参加京东满200减 100的大促,就在6.1这一天,仅此 ...

  3. jsp 页面标签 积累

    http://www.cnblogs.com/xiadongqing/p/5232592.html <%@ taglib %>引入标签库 ========================= ...

  4. osip2 代码分析

    主要类型定义: 1.osip_t /** * Structure for osip handling. * In order to use osip, you have to manage at le ...

  5. .net core 1.0 中的asp.net identity 基本使用(一)

    1.修改密码强度:打开Startup.cs,在public class Startup{}内找public void ConfigureServices(IServiceCollection serv ...

  6. 准备上线,切换到master分支,报错

    切换到master分支,准备上线,把上次上线sourceTree保存的修改拉出来: 运行,报错了: stackOverflow一搜说要删除旧的: 我show in finder 把他删了,然后双击安装 ...

  7. 正则表达式中的exec和match方法的区别

    正则表达式中的exec和match方法的区别 字符串的正则方法有:match().replace().search().split() 正则对象的方法有:exec().test() 1.match m ...

  8. MICAPS数据文件格式

    MICAPS系统的数据结构是建立在文件系统基础上的.其特点是: l  利用目录来区分不同的数据来源.要素和层次,即不同的数据来源.要素和层次的数据要放在不同的目录中.同一目录中的数据只能有时次或时效上 ...

  9. java.sql.SQLSyntaxErrorException: ORA-00936: 缺失表达式。

    今天遇到一个很奇怪的问题,sql报表达式错误,于是我把报错的那句sql(红色)放到数据库中执行,没有报错啊!百思不得其解! 呼!我已经提醒自己去注意看黑色的console信息了,得到了传参的参数值,但 ...

  10. 00Linux学习及角色定义

    一.嵌入式Linux学习顺序 二.Linux架构 三.Linux工程师角色划分 四. 嵌入式应用工程师工作内容与所需知识点 从图 1可以知道, 嵌入式应用工程师主要从事与产品相关的嵌入式 Linux ...