Advertisement
Guest User

Untitled

a guest
Nov 19th, 2016
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.58 KB | None | 0 0
  1. # Oracle 基础
  2.  
  3. ## 基础
  4.  
  5. ### 日期
  6. 标准写法
  7. ```sql
  8. INSERT INTO STUDENT VALUES (1,'胖哈',12,66,'12-11月-2015');
  9. ```
  10.  
  11. 日期格式化
  12. ```sql
  13. INSERT INTO STUDENT VALUES (1,'番说鱼',16,11,to_date('2016-11-11','yyyy-MM-dd'));
  14. ```
  15.  
  16. ### 排序
  17. Oracle并不会根据id(primary key) 自动排序,需要手动更改
  18.  
  19. ### url
  20. 两种
  21. ```sql
  22. jdbc:oracle:thin:@localhost:1521:ORCL
  23. ```
  24.  
  25. ```sql
  26. jdbc:oracle:thin:@//localhost:1521/ORCL
  27. ```
  28.  
  29. ### 分页
  30. ```sql
  31. SELECT * FROM
  32. (
  33. SELECT A.*, ROWNUM RN
  34. FROM (SELECT * FROM BOOKS) A
  35. WHERE ROWNUM <= 4
  36. )
  37. WHERE RN >= 2
  38. ```sql
  39. 1. 选取表BOOKS命名为A
  40. 2. 为A创建行数,并选择A中函数<=4的数据
  41. 3. 2中选出的数据,选出行数>=2的
  42.  
  43. ### 创建表空间
  44. ```sql
  45. CREATE TABLESPACE kumaSpace
  46. DATAFILE 'c:\MOracleSpace\jbit1.DBF'
  47. SIZE 100M ;
  48. ```
  49.  
  50. 指定默认表空间
  51. ```sql
  52. DEFAULT TABLESPACE tablespace
  53. ```
  54.  
  55. ## 用户权限
  56. ### SYS 超级用户
  57. 登录,不需要密码
  58. ```sql
  59. conn /as sysdba
  60. ```
  61.  
  62. 修改其他用户密码
  63. ```sql
  64. alter user paracide identified by manager;
  65. ```
  66.  
  67. ### DBA 管理员角色
  68.  
  69. ### RESIYRCE 可靠正式用户
  70.  
  71. ### CONNECT 临时用户
  72.  
  73. ### 创建用户
  74. 创建
  75. ```sql
  76. create USER paracide IDENTIFIED by a123456
  77. ```
  78.  
  79. 分配权限
  80. ```sql
  81. GRANT DBA TO paracide;
  82. ```
  83.  
  84. 撤销权限
  85. ```sql
  86. REVOKE privileges or role FROM user;
  87. ```
  88.  
  89. ## 增删改
  90. 同mysql,完成后需要手动提交
  91. ```sql
  92. commit;
  93. ```
  94.  
  95. ### 删除增加列
  96. ```sql
  97. ALTER TABLE STUDENT DROP COLUMN AGE;
  98. ALTER TABLE STUDENT ADD (google VARCHAR2(200),tiwtch VARCHAR2(200));
  99. ```
  100.  
  101. ### 修改表
  102. ```sql
  103. ALTER TABLE STUDENT MODIFY (NAME VARCHAR2(100));
  104. ```
  105.  
  106. ### 添加约束
  107.  
  108. #### 检查约束
  109. ```sql
  110. ALTER table account add constraint ck_account_cash CHECK (cash >0 and cash <=100);
  111. ```
  112.  
  113. #### 外键约束
  114. ```sql
  115. ALTER TABLE pet //受约束的那个表
  116. ADD CONSTRAINT fk_master_id //约束的名称
  117. FOREIGN KEY (masterid) //外键 受约束表中的受约束元素(源自外部的键)
  118. REFERENCES master(loginid);/别的表的主键!!,约束外键的表的元素
  119. ```
  120.  
  121. ### 序列 实现自增长
  122.  
  123. > **一个表一个序列**
  124.  
  125. 创建序列
  126. ```sql
  127. CREATE SEQUENCE sq_account_id ;
  128. ```
  129.  
  130. 为表绑定序列实现自增长
  131. ```sql
  132. INSERT INTO account VALUES (sq_account_id.nextval,12.3);
  133. ```
  134.  
  135. 查看当前序列
  136. ```sql
  137. SELECT SQ_ACCOUNT_ID4.currval FROM dual; //dual是系统默认的一个表
  138. ```
  139.  
  140. 可以通过多次报错实现填补中间空缺的序列
  141.  
  142. ## 查询
  143. ### to_char & 别名
  144. 按照指定要求,将日期转为指定格式的字符串,同时起别名 `日期`
  145. ```sql
  146. SELECT to_char(HIRE_DATE,'yyyy-MM-dd') 日期 FROM TEACHERS;
  147. ```
  148.  
  149. ### 连接
  150. - 将2个列合并到一个列
  151. ```sql
  152. SELECT name || DOB FROM STUDENTS;
  153. ```
  154. - 2个合并列中加入其他文字
  155. ```sql
  156. SELECT name || '的生日是' || to_char(DOB,'yyyy-MM-dd,HH24:mi:ss') FROM STUDENTS;
  157. ```
  158.  
  159. ### 逻辑判断
  160. - 如果其中一个值为null,则结果为null,而不是0+另外一个
  161. ```sql
  162. SELECT NAME, BONUS+WAGE 总收入 FROM TEACHERS;
  163. ```
  164.  
  165. - 时间也可以比较
  166. ```sql
  167. SELECT name, DOB FROM STUDENTS WHERE DOB < = '24-3月-2015';
  168.  
  169. SELECT name,DOB FROM STUDENTS WHERE DOB <= to_date('2015-3-24','yyyy-MM-dd');
  170. ```
  171.  
  172. - 包含
  173. in更安全,in中可以是不存在的值
  174. 而or的取值必须是存在的值,否则报错
  175. ```sql
  176. SELECT * FROM TEACHERS WHERE BONUS in(800,1000);
  177.  
  178. SELECT * FROM TEACHERS WHERE BONUS =800 or BONUS=1000;
  179. ```
  180.  
  181. - 取反
  182. ```sql
  183. SELECT * FROM STUDENTS WHERE SPECIALTY NOT IN ('计算机', '软件');
  184.  
  185. SELECT * FROM STUDENTS WHERE SEX = '男' AND SPECIALTY != '计算机';
  186. ```
  187.  
  188. - 是否为空
  189. 判断是否为null 只能用is 不能用 =
  190. ```sql
  191. SELECT * FROM TEACHERS WHERE WAGE is NOT NULL ;
  192. SELECT * FROM TEACHERS WHERE WAGE is NULL ;
  193. ```
  194.  
  195. ### 子查询
  196. ```sql
  197. SELECT * FROM TEACHERS WHERE WAGE < (SELECT avg(WAGE) FROM TEACHERS);
  198. ```
  199.  
  200. ### 分组
  201. 只能查询分组条件的列
  202. 其他列只能包含在聚合函数中 (sum avg max等等)
  203. ```sql
  204. SELECT DEPARTMENT_ID,avg(WAGE) FROM TEACHERS GROUP BY DEPARTMENT_ID;
  205. ```
  206.  
  207.  
  208. - 获取平均工资大于 最低平均工资的组 的组平均工资,编号
  209. ```sql
  210. SELECT
  211. DEPARTMENT_ID,
  212. avg(WAGE)
  213. FROM TEACHERS
  214. GROUP BY DEPARTMENT_ID
  215. HAVING avg(WAGE) > (SELECT min(avg(wage))
  216. FROM TEACHERS
  217. GROUP BY DEPARTMENT_ID);
  218. ```
  219. having 就是分组后的where
  220.  
  221. ### 分页
  222. 1. 使用between,先排序,否则会出现行号与id不匹配的情况
  223. ```sql
  224. SELECT *
  225. FROM (SELECT
  226. t.*,
  227. ROWNUM rn
  228. FROM (SELECT *
  229. FROM TEACHERS
  230. ORDER BY TEACHER_ID) t)
  231. WHERE rn BETWEEN 2 AND 5;
  232. ```
  233.  
  234. ### exists
  235. ```sql
  236. SELECT
  237. COURSE_ID,
  238. COURSE_NAME
  239. FROM COURSES c
  240. WHERE exists(SELECT 1
  241. FROM STUDENTS_GRADE g
  242. WHERE c.COURSE_ID = g.COURSE_ID);
  243. ```
  244. 然而并不好用,不如直接链接查询
  245. ```sql
  246. SELECT
  247. c.COURSE_ID,
  248. c.COURSE_NAME
  249. FROM COURSES c, STUDENTS_GRADE g
  250. WHERE c.COURSE_ID = g.COURSE_ID;
  251. ```
  252.  
  253. ### inner join
  254. ```sql
  255. SELECT
  256. s.STUDENT_ID 学生编号,
  257. s.NAME 学校姓名,
  258. c.COURSE_ID 课程编号,
  259. c.COURSE_NAME 课程名称,
  260. sg.SCORE 分数
  261. FROM STUDENTS s INNER JOIN STUDENTS_GRADE sg ON s.STUDENT_ID = sg.STUDENT_ID
  262. INNER JOIN COURSES c on sg.COURSE_ID =c.COURSE_ID;
  263. ```
  264. inner join不能在没有on依赖的情况下单独执行,因为inner join再生成总表时就已经开始筛选了
  265.  
  266. ### left out join
  267. 满足主表,主表存在就显示,即便主表中与join的表关联的值为null(在inner join中 则不会显示)
  268. ```sql
  269. SELECT *
  270. FROM TEACHERS t LEFT OUTER JOIN DEPARTMENTS d ON t.DEPARTMENT_ID = d.DEPARTMENT_ID;
  271. ```
  272.  
  273.  
  274. ### right out join
  275. 正好相反,如果左边没有,则全部显示为null
  276. ```sql
  277. SELECT *
  278. FROM TEACHERS t Right OUTER JOIN DEPARTMENTS d ON t.DEPARTMENT_ID = d.DEPARTMENT_ID;
  279. ```
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement