SQL DML 和 DDL

  1. 可以把 SQL 分为两个部分:数据操作语言 (DML) 数据定义语言 (DDL)。

SQL (结构化查询语言)是用于执行查询的语法。但是 SQL 语言也包含用于更新、插入和删除记录的语法。

查询和更新指令构成了 SQL 的 DML 部分:

  • SELECT - 从数据库表中获取数据
  • UPDATE - 更新数据库表中的数据
  • DELETE - 从数据库表中删除数据
  • INSERT INTO - 向数据库表中插入数据

SQL 的数据定义语言 (DDL) 部分使我们有能力创建或删除表格。我们也可以定义索引(键),规定表之间的链接,以及施加表间的约束。

SQL 中最重要的 DDL 语句:

  • CREATE DATABASE - 创建新数据库
  • ALTER DATABASE - 修改数据库
  • CREATE TABLE - 创建新表
  • ALTER TABLE - 变更(改变)数据库表
  • DROP TABLE - 删除表
  • CREATE INDEX - 创建索引(搜索键)
  • DROP INDEX - 删除索引
  1. --20180110简单SQL脚本学习--
  2.  
  3. 相关关键字: CREATE(创建) COMMENT ON(添加注释) COLUMN(列) FLASHBACK(回退) GROUP BY(分组) ORDER BY(排序) MODIFY(修改)
  4. --一、表的相关操作脚本
  5. --1.创建数据表
  6. --1.1常规创建表格
  7. CREATE TABLE STU_INFO(
  8. STU_ID VARCHAR(15) NOT NULL,
  9. STU_NAME VARCHAR(120),
  10. STU_CLASS VARCHAR(120),
  11. STU_SEX VARCHAR(10)
  12. );
  13. --1.2通过复制的方式创建表
  14. CREATE TABLE STU_INFO_TEMP AS SELECT * FROM STU_INFO;
  15. --1.3通过复制的方式但只是复制表结构不复制表的数据
  16. CREATE TABLE STU_INFO_TEMP AS SELECT * FROM STU_INFO WHERE 1=2;
  17. --2.给表和字段添加注释
  18. COMMENT ON TABLE STU_INFO IS '2018年1月10号SOULSJIE学习SQL脚本创建的数据表 ';
  19. COMMENT ON COLUMN STU_INFO.STU_ID IS '学生学号';
  20. COMMENT ON COLUMN STU_INFO.STU_NAME IS '学生的姓名';
  21. COMMENT ON COLUMN STU_INFO.STU_CLASS IS '学生所属班级';
  22. COMMENT ON COLUMN STU_INFO.STU_SEX IS '学生的性别';
  23. --3.修改表结构
  24. --2.1添加表字段
  25. ALTER TABLE STU_INFO ADD STU_ADD VARCHAR(120);
  26. --2.2修改表字段
  27. ALTER TABLE STU_INFO MODIFY (STU_SEX VARCHAR(6));
  28. --2.3删除表字段
  29. ALTER TABLE STU_INFO DROP (STU_ADD);
  30. --2.4修改表名
  31.  
  32. ALTER TABLE TESTS RENAME TO STU_INFO;
  33. --2.5修改列名
  34. ALTER TABLE STU_INFO RENAME COLUMN STU_CLASS TO STU_BANJI;
  35. --4.删除数据表
  36. DROP TABLE STU_INFO_TEMP;
  37. --5.恢复被DROP的数据表
  38. FLASHBACK TABLE STU_INFO TO BEFORE DROP;
  39. --6.表的截断 关键字 truncate 清空表中的数据,并且还原数据占用的内存空间
  40. TRUNCATE TABLE STU_INFO;
  41. --7.表的清空 关键字 delete 清空表中的数据,但是不还原数据占用的内存空间
  42. DELETE FROM STU_INFO;
  43.  
  44. --二.数据操作脚本
  45. --1.1插入单条数据
  46. --MySQL的写法和Oracle写法一样
  47. INSERT INTO STU_INFO
  48. (STU_ID, STU_NAME, STU_CLASS, STU_SEX)
  49. VALUES
  50. ('Q', 'Q', 'Q', 'Q');
  51. --1.2插入多条记录数据
  52. --MySQL的写法INSERT INTO TABLE_NAME (COLUMN_1COLUMN_2...,COLUMN_N) VALUES(VALUE_1VALUES_2,...,VALUES_N),(VALUES2_1VALUES2_2...,VALUES2_N);
  53. --例子:在mysql中插入多条数据INSERT INTO STU_INFO (STU_ID,STU_NAME,STU_CLASS) VALUES ('TE','TE','15'),('TT','TT','16');
  54. --但是在Oracle中插入多条数据写法有不同如下:
  55. INSERT ALL INTO STU_INFO
  56. (STU_ID,STU_NAME,STU_CLASS,STU_SEX)
  57. VALUES
  58. ('180301','张三','3','男')
  59. INTO STU_INFO (STU_ID,STU_NAME,STU_CLASS,STU_SEX)
  60. VALUES
  61. ('180302','李四','3','女')
  62. INTO STU_INFO (STU_ID,STU_NAME,STU_CLASS,STU_SEX)
  63. VALUES
  64. ('180303','张嘉佳','3','男')
  65. INTO STU_INFO (STU_ID,STU_NAME,STU_CLASS,STU_SEX)
  66. VALUES
  67. ('180304','李丽丽','3','女')
  68. INTO STU_INFO (STU_ID,STU_NAME,STU_CLASS,STU_SEX)
  69. VALUES
  70. ('180305','汪汪汪','3','男')
  71. INTO STU_INFO (STU_ID,STU_NAME,STU_CLASS,STU_SEX)
  72. VALUES
  73. ('180306','呵呵哈','3','女')
  74. SELECT 1 FROM DUAL;
  75. --2.删除数据
  76. DELETE FROM STU_INFO WHERE STU_ID='02';
  77. DELETE FROM STU_INFO WHERE 1=1;
  78. --3.修改数据
  79. UPDATE STU_INFO SET STU_NAME='JIE',STU_SEX='女' WHERE STU_ID='03';
  80. --4.简单查询数据
  81. --4.1查询所有数据
  82. SELECT * FROM STU_INFO;
  83. --4.2多条件查询 and关键字 逻辑与的关系
  84. SELECT * FROM STU_INFO WHERE STU_CLASS='3' AND STU_SEX='男';
  85. --4.3 or关键字 逻辑或的关系
  86. SELECT * FROM STU_INFO WHERE STU_CLASS='1' OR STU_CLASS='2';
  87. --4.4 group by 分组 注意:在同时使用order bygroup byorder by应该放在末尾
  88. SELECT STU_ID FROM STU_INFO GROUP BY STU_ID ORDER BY STU_ID ASC;
  89. --4.5 order by 排序 不写降序(desc)和升序(asc)时默认为升序
  90. SELECT * FROM STU_INFO ORDER BY STU_CLASS DESC
  91. --4.6 distinct 去重复
  92. SELECT DISTINCT STU_ID FROM STU_SCORE;
  93. --5.复杂数据查询 利用group by 进行统计查询
  94. --5.1 AVG 求各个课程的平均值
  95. SELECT S.KECHENG_BIANHAO 课程编号,
  96. AVG(S.KECHENG_CHENGJI) 平均分
  97. FROM STU_SCORE S
  98. GROUP BY S.KECHENG_BIANHAO;
  99. --5.2 min 求各个课程的最小值
  100. SELECT S.KECHENG_BIANHAO 课程编号,
  101. MIN(S.KECHENG_CHENGJI) 最小值
  102. FROM STU_SCORE S
  103. GROUP BY S.KECHENG_BIANHAO;
  104. --5.3 max 求各个课程的最大值
  105. SELECT S.KECHENG_BIANHAO 课程编号,
  106. SUM(S.KECHENG_CHENGJI) 最小值
  107. FROM STU_SCORE S
  108. GROUP BY S.KECHENG_BIANHAO;
  109. --5.4 sum 求各科课程的总分
  110. SELECT S.KECHENG_BIANHAO 课程编号,
  111. SUM(S.KECHENG_CHENGJI) 最小值
  112. FROM STU_SCORE S
  113. GROUP BY S.KECHENG_BIANHAO;
  114. --5.5 count 总计数目
  115. SELECT S.KECHENG_BIANHAO 课程编号, COUNT(*) 记录条数
  116. FROM STU_SCORE S
  117. GROUP BY S.KECHENG_BIANHAO;
  118. --5.6 连接查询 查询每个学生的总分
  119. SELECT I.STU_NAME 姓名, SUM(S.KECHENG_CHENGJI) 总分
  120. FROM STU_SCORE S
  121. JOIN KECHENG_INFO K
  122. ON S.KECHENG_BIANHAO = K.KECHENG_BIANHAO
  123. JOIN STU_INFO I
  124. ON S.STU_ID = I.STU_ID
  125. GROUP BY I.STU_NAME;
  126. --5.7C语言课程的最低分
  127. SELECT MIN(S.KECHENG_CHENGJI) 最低分
  128. FROM KECHENG_INFO K
  129. JOIN STU_SCORE S
  130. ON K.KECHENG_BIANHAO = S.KECHENG_BIANHAO
  131. WHERE K.KECHENG_NAME = 'C语言';
  132. SELECT * FROM STU_SCORE;
  133. SELECT * FROM KECHENG_INFO;
  134. --5.8左连接 LEFT JOIN 满足on之后的条件的数据才会出现在结果集中
  135. SELECT *
  136. FROM STU_SCORE S
  137. LEFT JOIN KECHENG_INFO K
  138. ON S.KECHENG_BIANHAO = K.KECHENG_BIANHAO;
  139. --5.9右连接 RIGHT JOIN 不满足on之后的条件的数据也会出现在结果集中
  140. SELECT *
  141. FROM STU_SCORE S
  142. RIGHT JOIN KECHENG_INFO K
  143. ON S.KECHENG_BIANHAO = K.KECHENG_BIANHAO;
  144. --5.10 全连接 FULL JOIN 是左连接和右链接两个结果的并集
  145. SELECT *
  146. FROM STU_SCORE S
  147. FULL JOIN KECHENG_INFO K
  148. ON S.KECHENG_BIANHAO = K.KECHENG_BIANHAO;
  149. -------------------------临时脚本-----------------------------------
  150.  
  151. --例子中用到表的创建、添加数据的SQL脚本 ---
  152. -------------------------------创建学生信息表
  153. CREATE TABLE STU_INFO(
  154. STU_ID VARCHAR(15) NOT NULL,
  155. STU_NAME VARCHAR(120),
  156. STU_CLASS VARCHAR(120),
  157. STU_SEX VARCHAR(10)
  158. );
  159. COMMENT ON TABLE STU_INFO IS '2018年1月10号SOULSJIE学习SQL脚本创建的数据表 ';
  160. COMMENT ON COLUMN STU_INFO.STU_ID IS '学生学号';
  161. COMMENT ON COLUMN STU_INFO.STU_NAME IS '学生的姓名';
  162. COMMENT ON COLUMN STU_INFO.STU_CLASS IS '学生所属班级';
  163. COMMENT ON COLUMN STU_INFO.STU_SEX IS '学生的性别';
  164. --向学生信息表中添加数据
  165. INSERT ALL INTO STU_INFO
  166. (STU_ID,STU_NAME,STU_CLASS,STU_SEX)
  167. VALUES
  168. ('180301','张三','3','男')
  169. INTO STU_INFO (STU_ID,STU_NAME,STU_CLASS,STU_SEX)
  170. VALUES
  171. ('180302','李四','3','女')
  172. INTO STU_INFO (STU_ID,STU_NAME,STU_CLASS,STU_SEX)
  173. VALUES
  174. ('180303','张嘉佳','3','男')
  175. INTO STU_INFO (STU_ID,STU_NAME,STU_CLASS,STU_SEX)
  176. VALUES
  177. ('180304','李丽丽','3','女')
  178. INTO STU_INFO (STU_ID,STU_NAME,STU_CLASS,STU_SEX)
  179. VALUES
  180. ('180305','汪汪汪','3','男')
  181. INTO STU_INFO (STU_ID,STU_NAME,STU_CLASS,STU_SEX)
  182. VALUES
  183. ('180306','呵呵哈','3','女')
  184. SELECT 1 FROM DUAL;
  185.  
  186. -------------------------------创建辅助数据表--成绩表
  187. CREATE TABLE STU_SCORE(
  188. STU_ID VARCHAR(12) NOT NULL,
  189. KECHENG_BIANHAO VARCHAR(50),
  190. KECHENG_CHENGJI VARCHAR(50)
  191. );
  192. COMMENT ON TABLE STU_SCORE IS 'soulsjie,学习连接查询创建的学生成绩表';
  193. COMMENT ON COLUMN STU_SCORE.STU_ID IS'学生学号';
  194. COMMENT ON COLUMN STU_SCORE.KECHENG_BIANHAO IS'课程编号';
  195. COMMENT ON COLUMN STU_SCORE.KECHENG_CHENGJI IS'课程成绩';
  196. --向成绩表中添加数据
  197. INSERT ALL INTO STU_SCORE (STU_ID,KECHENG_BIANHAO,KECHENG_CHENGJI)
  198. VALUES ('180301','0001','60')
  199. INTO STU_SCORE (STU_ID,KECHENG_BIANHAO,KECHENG_CHENGJI)
  200. VALUES ('180301','0002','62')
  201. INTO STU_SCORE (STU_ID,KECHENG_BIANHAO,KECHENG_CHENGJI)
  202. VALUES ('180302','0001','99')
  203. INTO STU_SCORE (STU_ID,KECHENG_BIANHAO,KECHENG_CHENGJI)
  204. VALUES ('180302','0002','99')
  205. INTO STU_SCORE (STU_ID,KECHENG_BIANHAO,KECHENG_CHENGJI)
  206. VALUES ('180303','0001','45')
  207. INTO STU_SCORE (STU_ID,KECHENG_BIANHAO,KECHENG_CHENGJI)
  208. VALUES ('180303','0002','15')
  209. INTO STU_SCORE (STU_ID,KECHENG_BIANHAO,KECHENG_CHENGJI)
  210. VALUES ('180304','0001','44')
  211. INTO STU_SCORE (STU_ID,KECHENG_BIANHAO,KECHENG_CHENGJI)
  212. VALUES ('180304','0002','55')
  213. INTO STU_SCORE (STU_ID,KECHENG_BIANHAO,KECHENG_CHENGJI)
  214. VALUES ('180305','0001','66')
  215. INTO STU_SCORE (STU_ID,KECHENG_BIANHAO,KECHENG_CHENGJI)
  216. VALUES ('180305','0002','55')
  217. INTO STU_SCORE (STU_ID,KECHENG_BIANHAO,KECHENG_CHENGJI)
  218. VALUES ('180306','0001','66')
  219. INTO STU_SCORE (STU_ID,KECHENG_BIANHAO,KECHENG_CHENGJI)
  220. VALUES ('180306','0002','88')
  221. SELECT 1 FROM DUAL;
  222. --给成绩表添加注释
  223. COMMENT ON TABLE STU_SCORE IS 'soulsjie,学习连接查询创建的学生成绩表';
  224. COMMENT ON COLUMN STU_SCORE.STU_ID IS '学生学号';
  225. COMMENT ON COLUMN STU_SCORE.KECHENG_BIANHAO IS '课程的编号';
  226. COMMENT ON COLUMN STU_SCORE.KECHENG_CHENGJI IS '课程的成绩';
  227.  
  228. -------------------------------创建辅助数据表--选课表
  229. CREATE TABLE KECHENG_INFO (
  230. KECHENG_BIANHAO VARCHAR(12) NOT NULL,
  231. KECHENG_NAME VARCHAR(50)
  232. );
  233. COMMENT ON TABLE KECHENG_INFO IS 'soulsjie,学习连接查询创建的课程信息表';
  234. COMMENT ON COLUMN KECHENG_INFO.KECHENG_BIANHAO IS '课程的编号';
  235. COMMENT ON COLUMN KECHENG_INFO.KECHENG_NAME IS '课程名';
  236. --添加选课表中的数据
  237. INSERT ALL INTO KECHENG_INFO (KECHENG_BIANHAO,KECHENG_NAME)
  238. VALUES
  239. ('0001','C语言')
  240. INTO KECHENG_INFO (KECHENG_BIANHAO,KECHENG_NAME)
  241. VALUES
  242. ('0002','JAVA')
  243. SELECT 1 FROM DUAL;

一、SQL基础知识点补充的更多相关文章

  1. java基础知识点补充---二维数组

    #java基础知识点补充---二维数组 首先定义一个二维数组 int[][] ns={ {1,2,3,4}, {5,6,7,8}, {9,10,11,12}, {13,14,15,16} }; 实现遍 ...

  2. c语言学习之基础知识点介绍(二):格式化控制符和变量的补充

    上节简单介绍了c语言中的一些基础知识点,本节将对之前介绍的不够详细的知识点进行补充. 格式化控制符的消息介绍: %d的其他控制符: 1.%md:m代表这个整数位占用多少位,m是一个整数.实际数字不足的 ...

  3. sql注入知识点整理(基础版)

    sql注入知识点整理(基础版) 基本步骤 判断是否报错 判断闭合符号 判断注入类型 构建payload 手工注入或者编写脚本 基本注入类型 报错型注入 floor公式(结果多出一个1):and (se ...

  4. JAVA基础知识点总结(全集)

    1.JAVA简介 1.1java体系结构:j2se,javaweb,j2ee 1.2java特点:平台无关(虚拟机),垃圾回收(使得java更加稳定) 1.3 JDK与JRE,JDK:java开发环境 ...

  5. 信安周报-第02周:SQL基础

    信安之路 第02周 Code:https://github.com/lotapp/BaseCode/tree/master/safe 前言 本周需要自行研究学习的任务贴一下: 1.概念(推荐) 数据库 ...

  6. 第一章 SQL基础

    第一部分:SQL基础1. 为什么学习SQL自人类社会形成之日起,社会的运转就在不断地产生和使用各种信息(文献.档案.资料.数据等):在如今所谓的信息时代,由于计算机和互联网的作用,信息的产生和使用达到 ...

  7. SQL基础--> 约束(CONSTRAINT)

    --============================= --SQL基础--> 约束(CONSTRAINT) --============================= 一.几类数据完 ...

  8. 小程序基础知识点讲解-WXML + WXSS + JS,生命周期

    小程序基础 小程序官方地址,小程序开发者工具,点击此处下载.在微信小程序中有一个配置文件project.config.json,此文件可以让开发者在不同设备中进行开发. 微信小程序共支持5种文件,wx ...

  9. swagger知识点补充

    1. swagger知识点补充 1.1. 概述 在swagger的使用过程中,除了网上常见的例子,还会有很多细节上的东西需要注意和改写,这里我列几点我使用过程中遇到的问题和改进方式 1.2. 知识点 ...

随机推荐

  1. Adding New Machine ZOJ - 3540

    https://vjudge.net/problem/ZOJ-3540 错误记录: 扫描线没有考虑到同一行的要删除在前,加入在后:由于用了特殊的方式所以想当然以为不需要考虑这个问题 #include& ...

  2. Four Segments CodeForces - 846C

    题目 题意:sum(l,r)表示数列a中索引为l到r-1(都包含)的数之和(如果l==r则为0).给出数列a,求合适的delim0, delim1, delim2,使res = sum(0, deli ...

  3. HDOJ 5475 An easy problem

    题目传送门 题意:一个计算器,两种操作,乘上x,或者除掉之前的某个x,结果取模输出 分析:因为取模不支持除法,然后比赛时想到用逆元,结果发现MOD需要与b互质,结果一直苦苦寻找求逆元的其它方法.后来队 ...

  4. 138 Copy List with Random Pointer 复制带随机指针的链表

    给出一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点.返回一个深拷贝的链表. 详见:https://leetcode.com/problems/copy-list- ...

  5. .net core跨域设置

    services.AddCors(options => options.AddPolicy("AllowSameDomain", builder => builder. ...

  6. LinQ的高级查询

    模糊查询: //数据库 + 自定义名称 =new 数据库 //例子: mydbDataContext con = new mydbDataContext(); //模糊查询表达式中用.Contains ...

  7. 第一章、 CLR的执行模型

    1. 概述 本章主要是介绍从源代码到可执行程序的过程中,CLR所做的工作. 2. 名词解释 ① 公共语言运行时(Common Language Runtime, CLR),是一个可由多种语言使用的 运 ...

  8. 你干啥的?Lombok

    01.Lombok 的自我介绍 Lombok 在官网是这样作自我介绍的: Project Lombok makes java a spicier language by adding 'handler ...

  9. spring Existing transaction found for transaction marked with propagation 'never' 解决

    先在申明事务中配置了所有的事务 <!--配置事物传播策略,以及隔离级别--> <tx:advice id="txAdvice" transaction-manag ...

  10. grep的几个参数

    -a 在二进制问就爱你中,以文本方式进行搜索 -c 计算找到搜索字符串的次数 -i 忽略大小写 -n 输出行号 -v 反向选择,即没有显示搜索字符串内容的那一行 grep -n '\.$'  file ...