-------------------------------------day3------------

--添加多行数据:
--
--
--INSERT [INTO] 表名 [(列的列表)]
--SELECT UNION

--SELECT 'HAHA',1,32
--UNION ALL --全部显示/显示重复数据 即使集合相同
--UNION---------将查询的两个结果集合并。结构必须一致 -->常见面试题
--SELECT 'HEHE',2,33
------将查询结果添加到列表中(子查询)
INSERT INTO LESSON (CCODE,CNAME,CNUM)
SELECT 'C001','C#编程基础',32 UNION
SELECT 'C002','C#OOP',36 UNION
SELECT 'C003','C#PRAME',36
SELECT *FROM lesson

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

--实现表的数据备份(复制到其他表中)

--1 生成表 查询, SELECT INTO

--准备:查询

--select* from info
-- SELECT * ---负责列的显示
-- FROM info --数据的来源
-- WHERE -- 查询的条件 eg: WHERE CNAME='C#OOP'
--TRUE 显示 ,false
--WHERE birthday>'1990-01-01'
SELECT SEX FROM info
WHERE sex IS NOT NULL

SELECT SNAME FROM INFO
WHERE sname LIKE '%月%'

------备份 info 表到info——bak中
-- 1 INFO_BAK
-- 2 插入查询数据
SELECT *INTO INTFO_BAK FROM INFO --两个功能 创建新表 插入查询数据
--注意 约束不备份 标识属性备份(IDENTITY)
SELECT * INTO INFO_BAK1 FROM INFO
WHERE 1=2
--将info 表中的女同学信息备份到info_bak中

--INSERT INTO INTFO_BAK ( SNAME SEX BIRTHDAY [ADDRESS] TEL )
--SELECT SNAME,SEX, BIRTHDAY ,[ADDRESS] TEL FROM INFO WHERE SEX=0
---------DML数据操作语言
----SQL 基本技能

----insert 增加
-- 语法 insert [into] tab_name[(co1name,co2name....列的列表)]
--(表名)
-- values(val1,val2....值的列表与列的列表匹配),(),()---可以添加多行

--eg(添加表格中所有列的数据)
--1
insert into info (sname,sex,birthday,[address],tel)
values('赵明月',0,'1982-3-6','永济','15511122221')
select * from info
insert info
values('房租名', 1,'1980-2-25', '北京','010-13112345')
select *from info
insert info
values('金钱豹',1,'1970-5-9','天津','13412362322')
insert info
values('赵月',0,'1988-4-26','长沙市','03318658888')
insert lesson
values('S1001',' C#语言程序逻辑和实现',52)
insert lesson
values('S2099','.net平台于c#语言',56)
insert lesson
values('S2002','Winform编程',48)
insert lesson
values('S1015','c#面向对象程序设计',68)
insert lesson
values('S3001',null,null)
select *from lesson

--修改
-- 语法:UPDATE TAB_NAME SET COLNAME=VAL,CONLNAME1=VAL..........
--[WHERE] ---筛选行
--SELECT *FROM info
--UPDATE info SET sex=1,[address]='八组'
--WHERE sex IS NULL AND [address] IS NULL

--UPDATE info SET sname ='张清瑞', sex=0,[address]='八组一哥'
--WHERE snumb=1

-- UPDATE info SET [ADDRESS] ='BJHAIDIAN'
--WHERE [address] LIKE '010%'
--删除 DELETE(行)
--语法: DELETE [FROM] TAB_NAME
-- [WHERE 筛选行] -- 如果不写 所有行被删除
-- eg1 DELETE FROM INFO
-- WHERE SEX =0 删除女同学
-- eg2 DELETE INFO 删除表

-- TRUNCATE TABLE 截断表 过程 DROP TABLE ----> CREATE TABLE
-- 语法: TRUNCATE TABLE INFO

--常见面试题
-- Q:delete 删除表中数据是否记录日志,是否能恢复
--A:日志内容是对行数据的删除行为,可以恢复
-- Q:truncate table 是否记录日志,是否能恢复
--A: 在oracle数据库DDL操作不记录日志,不可以恢复;
-- 在sqlserver数据库 DDL操作被记录,记录的是数据页的操作 可以恢复
--Q:清空海量数据 DELETE 和 TRUNCATE TABLE 哪个效率高
--A:TRUNCATE TABLE 效率高,因为他是以数据页为单位删除和记录日志,所有相对于DELETE
-- 来讲它的操作和记录次数少,所以效率会更高

--查询

--1简单查询
--语法:SELECT 显示内容
-- FROM 数据来源(表,视图,结果集)
-- [WHERE 条件] --筛选行
-- [GROUP BY 分组]
-- [HAVING 分组条件]
-- [ORDER BY 排序 升序(默认)asc 降序 desc]
-- 基础知识:SELECT(只读操作 从数据文件中读取,临时存储在内存中)
-- 查询效率:(15seconds)
-- SELECT 重点:效率
--1.SELECT *(所有列) 不建议写,只需要部分列,*在底层需要解析(
--知道*涵盖了哪些列)需要时间 影响效率
--2.WHERE 条件(bool 类型) 默认为全表遍历的方式
-- <,>,=,<=,>=,!=
-- and or not
-- is null ,is not null
--like &,_,[],[^]
--BETWEEN AND , NOT BETWEEN AND
-- in() , not in()
-- 3. order by 排序 升序asc 降序 desc
-- 1.排序是发生在内存中,对查询结果集排序,尽量少在
-- 服务器上排序,能不用就不用.最好在客户端进行排
-- 序
-- 按照薪水排序
SELECT * FROM EMP
ORDER BY SAL DESC

--按表达式排序
SELECT * FROM EMP
ORDER BY SAL+ ISNULL(COMM,0) DESC
--按多条件排序 原理:如果第一个条件排序出现相同数据时,可以
--按第二个条件继续排序
SELECT * FROM EMp
ORDER BY SAL DESC, HIREDATA ASC
--4.TOP 结果集中的前n个
select top 3 * from emp
select top 20 percent * from emp
--eg 查询工资最高的5名员工
SELECT TOP 5* FROM EMP
ORDER BY SAL+ ISNULL(COMM,0) DESC
--5. DISTINCT 隐藏重复数据
SELECT DISTINCT JOB FROM EMP
--6. 别名
SELECT ename AS 姓名,job 工作岗位,上级=MGR,HIREDATE 入职时间 FROM EMP
--7. 按格式显示:员工:7369 姓名:smith 工作是:clerk
SELECT '员工:'+cast(empno AS VARCHAR(10)),'姓名:'+ename ,'工作是:'+job from emp
---将数据转成指定类型
--2分组统计查询:

------统计函数:聚合函数
--MAX() , MIN() ,SUM(), AVG(), COUNT()
--平均薪水 SELECT COUNT(*) ,AVG(SAL),MAX(SAL) FROM EMP
----COUNT(*),COUNT(列)
--当列有null的时候 不算数量 而count(*) 不会为null
--max(),min(),count(), 可以 SUM(),AVG() 不可以
--不行 where 语句后跟的是bool变量的条件
--如果SELECT 语句后有聚合函数,那么其他字段不能显示在SELECT后,
--除非该字段写在聚合函数中

-----------分组语句

SELECT * FROM EMP

---------统计每个部门几个员工
SELECT DEPTNO,COUNT(EMPNO) 人数 FROM EMP
GROUP BY DEPTNO
HAVING COUNT(EMPNO)>3 -----筛选组的条件,一定跟在GROUP BY 后面

-----------EG:统计每个部门薪水超过2000的人数,并显示此人数至少两人的部门

SELECT JOB,COUNT(EMPNO) 人数 FROM EMP
WHERE SAL>2000
GROUP BY JOB
HAVING COUNT(EMPNO) >=2

-----筛选顺序 WHERE(不能跟聚合函数) /GROUP BY / HAVING(常跟聚合函数,很少跟字段)

------------------- SELECT 后面可以跟分组字段和聚合函数

-------------------- 可以按多组分列分组 用,隔开

------------------------------------------------多表连接查询
--两个表连接查询 不一定要有主外键关系
-- 需要将多个表的数据综合显示,就需要将多表连接查询
--------1. 笛卡尔积(基础(关系代数)) 也称为:交叉连接结果集

SELECT * FROM EMP,DEPT
SELECT *FROM EMP CROSS JOIN DEPT

---------2.内连接([inner] join)

--两个表中关联字段相等的行

------eg 1.
SELECT * FROM EMP,DEPT
WHERE EMP.DEPTNO=DEPT.DEPTNO----------->内连接

SELECT * FROM EMP JOIN DEPT ON EMP.DEPTNO=DEPT.DEPTNO AND JOB='CLERK'

--INFO LESSON SCORE
--1查询所有参加考试的同学的考试信息(考生姓名,参考科目,考试成绩)
--2将考试成绩及格的进一步查询出来
SELECT sname,cname,score FROM info,lesson,score
WHERE info.snumb=score.snumb AND lesson.ccode=score.ccode

SELECT SNAME,CNAME,score
FROM SCORE JOIN INFO
ON info.snumb=score.snumb
JOIN lesson
ON lesson.ccode=score.ccode

---------3.外连接
-------------左外连接:左表完全显示,右表显示与左表关联字段相等的行
-------------右外连接:右表完全显示,左表显示与右表关联字段相等的行

--eg
SELECT *FROM EMP LEFT JOIN DEPT
ON EMP.DEPTNO=DEPT.DEPTNO
-------------全连接 (原理:左表完全显示,右表完全显示,关联的相同部分只显示一次)
SELECT * FROM EMP FULL JOIN DEPT
ON EMP.DEPTNO=DEPT.DEPTNO
--------4. 自连接(常见笔试题)
--1如何判断自连接什么情况要用自连接
-------当同一列的值相互之间金星比较时
--2 自连接的使用语法(自己连接自己,一定要有别名)
SELECT * FROM EMP AS A,EMP AS B
--------------------

010.简单查询、分组统计查询、多表连接查询(sql实例)的更多相关文章

  1. MySQL之多表查询一 介绍 二 多表连接查询 三 符合条件连接查询 四 子查询 五 综合练习

    MySQL之多表查询 阅读目录 一 介绍 二 多表连接查询 三 符合条件连接查询 四 子查询 五 综合练习 一 介绍 本节主题 多表连接查询 复合条件连接查询 子查询 首先说一下,我们写项目一般都会建 ...

  2. SQL的多表连接查询

    SQL的多表连接查询 多表连接查询具有两种规范,SQL92和SQL99规范. SQL92规范支持下列多表连接查询: (1)等值连接: (2)非等值连接: (3)外连接: (4)广义笛卡尔积: SQL9 ...

  3. MySQL数据操作与查询笔记 • 【第7章 连接查询】

    全部章节   >>>> 本章目录 7.1 内连接查询 7.1.1 交叉连接(笛卡尔积) 7.1.2 内连接查询概要 7.1.3 内连接案例 7.1.4 自然连接 7.2 多表连 ...

  4. oracle(sql)基础篇系列(二)——多表连接查询、子查询、视图

        多表连接查询 内连接(inner join) 目的:将多张表中能通过链接谓词或者链接运算符连接起来的数据查询出来. 等值连接(join...on(...=...)) --选出雇员的名字和雇员所 ...

  5. oracle(sql)基础篇系列(二)——多表连接查询、子查询、视图

    多表连接查询 内连接(inner join) 目的:将多张表中能通过链接谓词或者链接运算符连接起来的数据查询出来. 等值连接(join...on(...=...)) --选出雇员的名字和雇员所在的部门 ...

  6. 5月10日 python学习总结 单表查询 和 多表连接查询

    一. 单表查询  一 语法 select distinct 查询字段1,查询字段2,... from 表名 where 分组之前的过滤条件 group by 分组依据 having 分组之后的过滤条件 ...

  7. PostgreSQL-join多表连接查询和子查询

    一.多表连接查询 1.连接方式概览 [inner] join 内连接:表A和表B以元组为单位做一个笛卡尔积,记为表C,然后在C中挑选出满足符合on 语句后边的限制条件的内容. left [outer] ...

  8. IBatis.Net 表连接查询(五)

    IBatis.Net之多表查询: 一.定制实际对应类的方式 首先配置多表的测试数据库,IBatis.Net之Oracle表连接查询配置: 首先新建两张表如下: 为两张表建立外键: ALTER TABL ...

  9. mysql(4)—— 表连接查询与where后使用子查询的性能分析。

    子查询就是在一条查询语句中还有其它的查询语句,主查询得到的结果依赖于子查询的结果. 子查询的子语句可以在一条sql语句的FROM,JOIN,和WHERE后面,本文主要针对在WHERE后面使用子查询与表 ...

随机推荐

  1. js的event详解

    event代表事件的状态,例如触发event对象的元素.鼠标的位置及状态.按下的键等等.event对象只在事件发生的过程中才有效.event的某些属性只对特定的事件有意义.比如,fromElement ...

  2. 什么是ECS?

  3. 部署zabbix监控平台(源码安装)

    案例:部署Zabbix监控平台 1 问题 本案例要求部署一台Zabbix监控服务器,一台被监控主机,为进一步执行具体的监控任务做准备: 安装LNMP环境 源码安装Zabbix 安装监控端主机,修改基本 ...

  4. 【机器学习】sigmoid函数求导 手写过程

  5. 在Ubuntu里搭建spark环境

    注意:1.搭建环境:Ubuntu64位,Linux(也有Windows的,我还没空试)       2.一般的配置jdk.Scala等的路径环境是在/etc/profile里配置的,我自己搭建的时候发 ...

  6. 百度之星2019第一场1002 Game

    思路: 离散化之后dp,dp[i][j]表示完成前i个任务并且处在第j个点所需要的最小代价. 实现: #include <bits/stdc++.h> using namespace st ...

  7. 【ARM-Linux开发】 uboot启动阶段修改启动参数方法及分析

    作者:围补 本来启动方式这节不是什么复杂的事儿,不过想简单的说清楚明白,还真是不知道怎么组织.毕竟文字跟有声语言表达有别.但愿简单的东西别让我讲的太复杂! Arm板系统文件一般有三个--bootloa ...

  8. 一次记录 java非web项目部署到linux

    1.生成可执行jar 运行提示没有主清单属性 一番查找原因:是因为将项目生成jar包的时候,生成的MANIFEST.MF没有MAIN-CLASS,这里加上就可以了,后面的是项目启动类的完整类名 当然还 ...

  9. 在Linux上显示某个进程的线程的几种方式

    方法一:PS 在ps命令中,"-T"选项可以开启线程查看.下面的命令列出了由进程号为的进程创建的所有线程. 1.$ ps -T -p 方法二: Top top命令可以实时显示各个线 ...

  10. SQL SERVER ISDATE函数

    定义: ISDATE函数判断指定字符串是否是有效日期. 语法: ISDATE(date) 参数: ①date是需要判定是否是有效日期的字符串 返回值: int型数据 例:  声明:本文是本人查阅网上及 ...