操作语句

SQL语句

建表

CREATE tablespace 表名

1
2
3
4
5
6
CREATE tablespace stx //创建
datafile 'D:\02_workspace\03_dbData\oracle\stx.dbf' // 创建地址
SIZE 128m // 指定创建大小
autoextend ON //
NEXT 16m; //

删除表空间

delete

创建用户

1
2
3
CREATE USER project
IDENTIFIED BY root
DEFAULT tablespace stx;

授权

GRANT dba TO frank_24

增删改查

1.1查询语句

  • 第一种查询
1
2
-- 查询所有学生信息
-- 语法: SELECT 列名 from 表名
  • 查询一个表中多个列的数据,可以使用,隔开。就像这样:
1
SELECT stu_id,stu_name,collge FROM t_student;
  • 查询所有信息
    查询表中的所有信息:使用*代替所有的列。
1
2
-- 查询所有的数据
SELECT * FROM T_STUDENT;
  • 给数据列取别名

第一种写法:

1
SELECT 列名1 "别名1",列名2 "别名2" FROM T_STUDENT;

在列名之后加上一个空格,双引号,写上别名。

第二种写法:

1
SELECT  列名2 AS "别名1" ,列名1 AS "别名2" FROM T_STUDENT;

在列名之后加上一个空格,写上as关键字,后面跟上"别名"

  • 查询系统时间
1
2
3
-- dual 这是一张虚表

SELECT SYSDATE FROM dual ; // 查询系统时间

不知道查哪一张表时,就可以查询dual这张表。

  • 查询36*36等于多少
1
2
-- 查询36*36等于多少
SELECT 36*36 FROM dual ; // 1296

1.2条件查询

1
2
-- 条件查询
--SELECT 列名 from 表名 WHERE 条件

条件是一个是表达式。

表达式可以这样写:PROVINCE = '四川',SCORE >= 80

查询以什么字段开头的数据:

1
SELECT * FROM T_STUDENT ts WHERE STU_NAME LIKE '曹%';

使用like关键字(模糊匹配),然后%表示占位符,不管多少个字符。

例如:

  • str%:以str开头的数据
  • %str%:包含str的数据
  • %str:以str结尾的数据

查询指定长度的数据:

1
SELECT * FROM T_STUDENT ts WHERE STU_NAME LIKE '__';

(此时为两个下划线,表示查询长度为两个字符的数据)

此时使用_来表示占位符,一个_表示一个字符长度。

如果有多个包含条件:

  • 我们使用AND关键字连接条件:
1
SELECT * FROM T_STUDENT ts WHERE COLLGE = '大数据与计算机科学学院' AND  MAJOR = '软件工程';

如果查询多个并列条件:

  • 第一种:我们使用OR关键字
1
SELECT * FROM T_STUDENT ts WHERE COLLGE  = '外国语学院' OR COLLGE = '远景学院';
  • 第二种:使用in关键字
1
SELECT * FROM T_STUDENT ts WHERE COLLGE IN('外国语学院','远景学院');

查询指定范围内的数据:

  • 使用AND
  • 使用BETWEEN 开始范围 AND 结束范围:包含开始范围以及结束范围。
    1
    SELECT * FROM T_STUDENT ts WHERE SCORE BETWEEN 80 AND 90;

同一列表数据去重:

  • 使用关键字distinct
1
SELECT DISTINCT  (PROVINCE) from T_STUDENT ts ;

distinct(要去重的列)。

对结果进行排序

  • 使用关键字order by 列名 升序还是降序(默认升序asc,降序desc)
1
SELECT STU_ID ,STU_NAME ,COLLGE,score  FROM T_STUDENT ts ORDER BY SCORE  asc;
  • 对于有两种情况时:
1
SELECT * FROM T_STUDENT ts ORDER BY COLLGE , score DESC;

1.3聚合函数

  • 统计某列数据个数:count(列名)
1
SELECT  count(stu_name) FROM T_STUDENT ts ;

查询姓名这一列有多少个数据。

  • 求平均分avg(列名)
  • 求最大值max(列名)
  • 求最小值min(列名)
    

查询语句书写顺序

SFWGHO

  1. select
  2. from
  3. where
  4. group
  5. having
  6. order

1.4分组

  • group by 列名

在使用group by时,select子句只能由以下部分组成:

1.汇总函数
2.GROUPBY中出现的列名
3.1和2通过函数和表达式的结果

1
SELECT major,count(STU_ID) FROM T_STUDENT ts GROUP BY major ;

1.5HAVING

在分组之前进行筛选,我们使用where,在分组之后我们进行筛选我们使用HAVING。

例如:

1
2
3
4
SELECT collge,count(STU_ID),avg(score) FROM T_STUDENT ts 
GROUP BY COLLGE
HAVING COUNT(STU_ID) >= 2
ORDER BY avg(score) DESC;

连表查询

插入语句

语法: insert into 表名(列名1,列名2,.....) values(值1,值2,值3......)

一种简介写法:

列名省略,这样的话就需要给每一列添加值,并且添加值的顺序与列名顺序一致。

1
2
INSERT INTO T_COLLEGE 
VALUES(0004,'外国语学院','曹寒梅');

修改语句

语法: update 表名 set 列名1 = 值1,列2 = 值2 where 条件;

删除语句

语法: delete from 表名 where 条件;

连表查询

  • sql89标准

语法:

1
2
SELECT stu_name,col_name FROM T_STUDENT ts,T_COLLEGE tc
WHERE ts.col_id = tc.col_id;
  • sql99标准
1
2
SELECT stu_name ,collge FROM T_STUDENT ts INNER JOIN T_COLLEGE tc 
ON ts.col_id = tc.col_id;