- INSERT INTO "WATERBOSSFACTORY"."TBL_STUDENTS"("STU_NUM", "STU_NAME", "STU_SEX", "STU_AGE", "STU_TEL", "STU_CID") VALUES ('2022000001', '赵云', '男 ', '22', '17896523785', '001');
-
- insert into table_name(column1,column2) select column1,column2 from other_table;
-
- // 创建表时直接插入数据
- CREATE TABLE tbl_test AS SELECT STU_NUM,STU_AGE,STU_SEX FROM TBL_STUDENTS;
注:
(1)小括号中指定需要添加数据的列名,可以一个到多个,如果是所有列都添加数据时,可以省略,建议不省略
(2)values中给出的数据需要和列名一致
案例2:修改数据
UPDATE "TBL_STUDENTS" SET "STU_NUM" = '2022000003', "STU_NAME" = '赵云', "STU_SEX" = '男 ', "STU_AGE" = '22', "STU_TEL" = '17896523785', "STU_CID" = '001' WHERE "STU_NUM" = '2022000001' AND "STU_NAME" = '赵云' AND "STU_SEX" = '男 ' AND "STU_AGE" = '22' AND "STU_TEL" = '17896523785' AND "STU_CID" = '001';
DELETE TBL_STUDENTS WHERE STU_NUM = '2022000003'
为快速创建数据,下载了方方格子,一个excel神器可以快速生成电话号码,姓名等等,此时一共有1343条数据。
- // 指定列与所有列
- SELECT STU_NAME FROM TBL_STUDENTS;
-
- // 所有列
- SELECT * FROM TBL_STUDENTS;
-
- // 字段起别名
- SELECT STU_NAME AS 姓名,STU_AGE AS 年龄 FROM TBL_STUDENTS;
-
- // 计算列
- SELECT STU_NAME AS 姓名,2022-STU_AGE AS 出生年 FROM TBL_STUDENTS;
-
- // 使用函数
- SELECT STU_NAME AS 姓名,SUBSTR(STU_TEL, 8, 4) AS 电话后四位 FROM TBL_STUDENTS;
-
- // 把重复性的记录去掉,只保留一条。修饰多字段时,多个字段的值都不一样才保留
- SELECT DISTINCT STU_NAME,STU_AGE FROM TBL_STUDENTS;
注:
(1)distinct如果是多个字段时,会造成多个字段都不相等时算做重复,如果此时还想单个去重,则使用group by
案例4:排序
ORDER BY默认升序,空是最大的
- SELECT * FROM TBL_STUDENTS WHERE STU_CID = '002' ORDER BY STU_TEL DESC
-
- // 多字段排序
- SELECT * FROM TBL_STUDENTS WHERE STU_CID = '002' ORDER BY STU_TEL DESC,STU_AGE
注:
(1)多字段排序,谁在前面谁先排序
案例5:分组查询
聚合函数:conunt() 数据统计 sum() avg()max() min()
-
- // 聚合查询
- SELECT sum(STU_AGE) FROM TBL_STUDENTS WHERE STU_NAME LIKE '%韩%'
-
- SELECT max(STU_AGE) FROM TBL_STUDENTS WHERE STU_NAME LIKE '%韩%'
-
- SELECT min(STU_AGE) FROM TBL_STUDENTS WHERE STU_NAME LIKE '%韩%'
-
- SELECT conut(STU_AGE) FROM TBL_STUDENTS WHERE STU_NAME LIKE '%韩%'
-
- SELECT AVG(STU_AGE) FROM TBL_STUDENTS WHERE STU_NAME LIKE '%韩%'
-
- // 分组查询
- SELECT STU_SEX,COUNT(*) FROM TBL_STUDENTS WHERE STU_NAME LIKE '%韩%' GROUP BY STU_SEX
-
- // HAVING GROUP BY分组后的结果添加过滤条件
- SELECT STU_AGE,COUNT(*) FROM TBL_STUDENTS WHERE STU_NAME LIKE '%韩%' GROUP BY STU_AGE HAVING STU_AGE != 14
(1)如果使用group by的结果,则select 后只能是分组字段或者聚合函数,如果使用其它的,则会报错
ORA-00979: not a GROUP BY expression
(2)HAVING必须添加到group By的后面
案例6:嵌套查询
根据其它表的信息,查询本表的数据
- // 展示班级名称和班级中的人数
- SELECT '计控2班',COUNT(*) FROM TBL_STUDENTS WHERE STU_CID = (SELECT CLASS_ID FROM TBL_CLASSES WHERE CLASS_NAME = '计控二班')
注:子查询只返回一个值,则使用=,如果是多条数据,则使用IN关键字
案例7:连接查询
两个表的内容进行拼接,并且按照两个表的过滤条件过滤
内连接:查询出两个表的匹配数据
第二条是条件查询使用WHERE,第三条是内连接使用ON,分为等值连接和不等值连接,不等值连接用的不多
- // 数量是两个表的笛卡尔积(集合相乘,个数是两个集合的个数的乘积)
- SELECT * FROM TBL_STUDENTS,TBL_CLASSES
-
- SELECT * FROM TBL_STUDENTS student,TBL_CLASSES class WHERE student.STU_CID = class.CLASS_ID
-
- SELECT * FROM TBL_STUDENTS student INNER JOIN TBL_CLASSES class ON student.STU_CID = class.CLASS_ID
-
- SELECT * FROM TBL_STUDENTS LEFT JOIN TBL_CLASSES ON TBL_STUDENTS.STU_CID = TBL_CLASSES.CLASS_ID
-
- // 显示班级表的所有数据,如果学生和班级匹配一条则显示一条,如果学生没有进班级,则此条不显示,如果班级没有进学生,则此条显示,但是学生是空
- SELECT * FROM TBL_STUDENTS RIGHT JOIN TBL_CLASSES ON TBL_STUDENTS.STU_CID = TBL_CLASSES.CLASS_ID
外连接:JOIN关键字前边的是左连接,后边的是右连接
左外连接:包含左边表的全部行(不管右边的表中是否存在与它们匹配的行),以及右边表中全部匹配的行
右外连接 :包含右边表的全部行(不管左边的表中是否存在与它们匹配的行),以及左边表中全部匹配的行
全外连接 : 包含左、右两个表的全部行,不管另外一边的表中是否存在与它们匹配的行。