05_基本SQL SELECT语句

  • 一、SQL语言概述
  • 二、SQL分类
  • 1.DML
  • 2.DDL
  • 3.DCL
  • 4.SQL语句书写规范
  • (了解)课堂表的结构
  • 三、基本 SELECT 语句
  • 1.选择全部列
  • 2.查询特定的列
  • 3.算术运算符
  • 4.操作符优先级
  • 5.定义空值
  • 6.列的别名
  • 7.连接符
  • 8.字符串
  • 9.重复行
  • 10.统计
  • 四、SQL 和 SQL*Plus
  • 1.SQL 语句与 SQL*Plus 命令
  • 2.SQL*Plus
  • 3.显示表结构
  • 总 结



Oracle的要求:


程序员 目标不是DBA


学习的核心:通过SQL去操作数据


Oracle的高级应用 :PLSQL

Oracle的操作的图形化界面客户端

PLSQL Developer

navcat链接oracle的配置

sql中的delete RESTRICT SQL中的select语句_数据


PLSQL的使用:

切换用户:

sql中的delete RESTRICT SQL中的select语句_数据库_02


scott用户属于oracle所提供的默认用户 自带示例数据

执行sql可以在sql窗口下 去执行

sql中的delete RESTRICT SQL中的select语句_SQL_03


还可以在命令窗口去执行

sql中的delete RESTRICT SQL中的select语句_数据库_04

一、SQL语言概述

①什么是SQL语言

结构化查询语言(Structured Query Language)(发音ˈes kjuːˈ)
SQL是最重要的关系数据库操作语言,是所有关系数据库管理系统的标准语言
许多数据库厂商在使用SQL的同时,都对SQL进行了扩展,比如ORACLE的PL/SQL语言,MS SQL-Server的T-SQL语言
SQL语言是一种非过程化语言,只需要提出”做什么”,而不需要指明“怎么做”

②SQL可以做什么

数据库数据的增删改查操作(CRUD)
数据库对象的创建,修改和删除操作
用户权限/角色的授予和取消
事务控制

二、SQL分类

SQL语句分为以下三种类型:

DML: Data Manipulation Language 数据操纵语言
DDL:  Data Definition Language 数据定义语言
DCL:  Data Control Language 数据控制语言

1.DML

DML用于查询与修改数据记录,包括如下SQL语句:

INSERT:添加数据到数据库中
UPDATE:修改数据库中的数据
DELETE:删除数据库中的数据
*SELECT:选择(查询)数据

(SELECT是SQL语言的基础,最为重要。)

2.DDL

DDL用于定义数据库的结构,比如创建、修改或删除数据库对象,包括如下SQL语句:

*CREATE TABLE:创建数据库表
*ALTER  TABLE:更改表结构、添加、删除、修改列长度
*DROP TABLE:删除表
CREATE INDEX:在表上建立索引
DROP INDEX:删除索引

3.DCL

DCL用来控制数据库的访问,包括如下SQL语句:

GRANT:授予访问权限
REVOKE:撤销访问权限
*COMMIT:提交事务处理
*ROLLBACK:事务处理回退
*SAVEPOINT:设置保存点
LOCK:对数据库的特定部分进行锁定

4.SQL语句书写规范

1.使用大小写规范提高词义识别能力

a.在名称中仅使用字母,数字和下划线
     b.列名,参数和变量等标量小写
     c.模式对象名首字母大写
        模式对象包括表,视图和存储过程等,在创建这些名称时,应当将首字母大写,表示为专有名称。
     d.保留关键字大写  :SELECT、 UPDAGTE  、DELETE、 INSERT... INTO..、  FROM 、 WHERE  、ORDER BY、 GROUP BY、HAVING、 BETWEEN ... AND、 OR、 LIKE

2.使用空格提供更好的语言标记区分

a.等号两边使用空格
       在书写赋值语句时,应当在等号两边使用空格分隔,如set @i = 1 比 set @i=1更容易阅读      		
		b.逗号后面使用空格

3.使用缩进提高语句的逻辑层次表达能力
4. 使用垂直空白道提高关键字与参数的区分能力
5.使用分组进行语句的段落划分
存在多行SQL的情况下,相关语句之间可以直接换行书写,而对于两个步骤之间的语句应当间隔一个空行,需要的话 ,也可以加入一些适当的注释语句.:
注释:–

6.注释

单行注释: --
多行注释:/**/
注:MySQL注释:#

(了解)课堂表的结构

hr用户的表:

sql中的delete RESTRICT SQL中的select语句_数据_05


sql中的delete RESTRICT SQL中的select语句_SQL_06


sql中的delete RESTRICT SQL中的select语句_SQL_07


sql中的delete RESTRICT SQL中的select语句_SQL_08


sql中的delete RESTRICT SQL中的select语句_数据_09


sql中的delete RESTRICT SQL中的select语句_数据库_10


sql中的delete RESTRICT SQL中的select语句_数据库_11


Scott用户的表:

sql中的delete RESTRICT SQL中的select语句_数据_12


sql中的delete RESTRICT SQL中的select语句_数据_13


sql中的delete RESTRICT SQL中的select语句_数据_14

三、基本 SELECT 语句

SELECT  *|{[DISTINCT] column|expression [alias],...}FROM
•SELECT   标识 选择哪些列。
•FROM     标识从哪个表中选择。

1.选择全部列

-- 这是一条查询语句
/*
    SELECT 表示这是一条查询语句
    *表示查询所有的列 是一个通配符
    FROM 表示数据来源 通常是表明(也有可能是一条查询语句)
    Employees 数据源
    每一条sql语句结束之后 必须加上分号
*/
SELECT  * FROM Employees;

2.查询特定的列

--查询 特定的列  在select 之后 列出要查询的列的列明 列明之间使用逗号分隔
select first_name,
       last_name ,
       salary 
from employees order by salary;

注 意:
①SQL 语言大小写不敏感
②SQL 可以写在一行或者多行
③关键字不能被缩写也不能分行
④各子句一般要分行写。
⑤使用缩进提高语句的可读性。

3.算术运算符

数字和日期使用的算术运算符

sql中的delete RESTRICT SQL中的select语句_SQL_15


使用数学运算符:

-- 使用算数运算符 对所有员工的工资 增加300
select first_name,last_name ,salary,salary+300  from employees ;
-- 计算每一个员工的年薪
select  first_name,last_name ,salary,salary* 12 from employees;

4.操作符优先级

乘除的优先级高于加减。
同一优先级运算符从左向右执行。
括号内的运算先执行。

使用括号

-- 为每一个员工月薪增加100  之后计算每一个员工的年薪
select  first_name,last_name ,salary,(salary+100)* 12 from employees;

5.定义空值

①空值是无效的,未指定的,未知的或不可预知的值
②空值不是空格或者0。

在进行四则运算时 对于空值的处理 null

-- 计算每一个员工的年薪 包括奖金
select first_name,last_name ,salary,commission_pct,(salary + salary * commission_pct)*12 from employees;

在一个运算中 如果有null值参与 则结果为null

-- 计算每一个员工的年薪 包括奖金
-- 当员工commission_pct为null的时候 则得到的计算结果也为null
--在一个运算中 如果有null值参与 则结果为null
--nvl函数 是进行空值处理 NVL(commission_pct,0) 表示对于该字段中的null在运算中使用0来替代
select first_name,last _name ,salary,commission_pct,(salary + salary * NVL(commission_pct,0))*12 from employees;

6.列的别名

重命名一个列。
便于计算。
紧跟列名,也可以在列名和别名之间加入关键字‘AS’,别名使用双引号,以便在别名中包含空格或特殊的字符并区分大小写。

第一种方式 在需要命名别名的字段后 使用as 别名

select first_name as fname,last_name as lname,salary,commission_pct,(salary + salary * NVL(commission_pct,0))*12 as yearSalary from employees;

第二种方式 省略as

select first_name   fname,last_name   lname,salary,commission_pct,(salary + salary * NVL(commission_pct,0))*12  yearSalary from employees;

7.连接符

把列与列,列与字符连接在一起。
用 ‘||’表示。
可以用来‘合成’列。
-- 连接符的使用
-- 将frist_name 和last_name 拼接起来 形成fullname
select  first_name ,last_name,first_name||' '||last_name  fullname from employees;

在oracle中 没有双引号 字符串的表示采用是单引号

8.字符串

字符串可以是 SELECT 列表中的一个字符,数字,日期。
日期和字符只能在单引号中出现。
每当返回一行时,字符串被输出一次。

-- 将frist_name 和last_name 拼接起来 形成fullname
select  first_name ,last_name,first_name||' '||last_name||'这是全名'  fullname from employees;

9.重复行

在 SELECT 子句中使用关键字 ‘DISTINCT’ 删除重复行。(distinct)

--在employees表中来查询所有的部门编号  不允许重复出现
select distinct department_id from employees;

10.统计

-- 统计
--查询表中的记录数
-- 在统计的时候 如果选择根据某一个字段来统计 则如果该字段包含null值 则null不会被统计
--在统计的选择中 一般可以使用*  但是* 表示根据所有的字段进行统计 效率相对较低
--所以根据某一个字段统计 是一种比较好的选择 但是不能选择包含null值的列 
--一般选择主键列来作为统计列
select count(*) from employees;
select count(employee_id) from employees;
select count(commission_pct) from employees;

四、SQL 和 SQL*Plus

1.SQL 语句与 SQL*Plus 命令

SQL

一种语言
ANSI 标准
关键字不能缩写
使用语句控制数据库中的表的定义信息和表中的数据

SQL*Plus

一种环境
Oracle 的特性之一
关键字可以缩写
命令不能改变数据库中的数据的值
集中运行

2.SQL*Plus

使用SQL*Plus可以:

描述表结构。
编辑 SQL 语句。
执行 SQL语句。
将 SQL 保存在文件中并将SQL语句执行结果保存在文件中。
在保存的文件中执行语句。
将文本文件装入 SQL*Plus编辑窗口。

3.显示表结构

使用 DESCRIBE 命令,表示表结构

DESC[RIBE] tablename
DESCRIBE employees

在sql窗口中 只能执行sql语句 不能执行oracle的命令

sql中的delete RESTRICT SQL中的select语句_SQL_16


在命令窗口:

sql中的delete RESTRICT SQL中的select语句_SQL_17


切换用户:

SQL> conn scott/tiger;
Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 
Connected as scott@ORCL

显示当前登录用户:

sql中的delete RESTRICT SQL中的select语句_数据库_18


sql中的delete RESTRICT SQL中的select语句_数据_19


在cmd窗口中来启动sql/plus:

sql中的delete RESTRICT SQL中的select语句_SQL_20

总 结

通过本课,您应该可以完成:
①书写SELECT语句: SELECT … FROM…

返回表中的全部数据。
返回表中指定列的数据。
使用别名。

②使用 SQLPlus 环境,书写,保存和执行 SQL 语句和 SQLPlus 命令。

SELECT  *|{[DISTINCT] column|expression [alias],...}
FROM  table;