SQL基础1——select查询

简介: 原文转自  一沙弥的世界  的博客 一、SQL 结构化查询语言     包括DDL(数据定义语言)、DCL(数据控制语言)、     DQL(数据查询语言)、DML(数据操纵语言)   二、SQL的特点     SQL 语句不区分大小写     ...

原文转自  一沙弥的世界  的博客

一、SQL 结构化查询语言

    包括DDL(数据定义语言)、DCL(数据控制语言)、

    DQL(数据查询语言)、DML(数据操纵语言)

 

二、SQL的特点

    SQL 语句不区分大小写

    SQL 语句能输入一行或多行

    关键字不能整行缩写或分离

    子句通常被放置在分开的行上

    缩进可提高可读性

    SQL 开发工具,SQL 语句能选择分号结束(;) .当你运行多个SQL 语句的时候,需要分号

    SQL*Plus你要用一个分号结束每个SQL 语句.(;)

 

三、SQL*PLUS特征:

    字符日期左对齐

    数字右对对齐

    列名默认大写

    SQL PLUS 自己的命令不需以分号结束

 

四、SQL查询时,数字和日期类型的数据可用算术运算符

    +   

      

      

      

    ( ) 用于改变运算符的优先级

 

五、空值

    空值一般用NULL表示

    一般表示未知的、不确定的值,也不是空格

    一般运算符与其进行运算时,都会为空

    空不与任何值相等

 

    表示某个列为空用:IS NULL  不能使用COMMNULL这种形式

    某个列不为空:IS NOT NULL 不能使用COMM != NULL 这种形式

 

    空值在作升序排列时,空值会放到最后。

    相反作降序排列时,空值会放在最前。

 

    空值作逻辑运算时:

    AND运算:

    F AND F F       F AND T F       F AND NULL F

    T AND F F       T AND T T       T AND NULL IS NULL

    NULL AND F F    NULL AND T IS NULL   NULL AND NULL IS NULL

 

    就是说AND的优先级是:->NULL ->T

 

 

    OR运算:

    T OR T T     T OR F T     T OR NULL T

    F OR T T     F OR F F     F OR NULL IS NULL

    NULL OR T T  NULL OR F IS NULL NULL OR NULL IS NULL

 

    OR运算优先级:->NULL ->F

 

 

    NOT运算:

       NOT T F

       NOT F T

       NOT NULL IS NULL

 

 

    与空值相关的函数:

    NVL 函数

       格式:NVL(表达式1,表达式2)

       作用:测试表达式的值,如果表达式1为空,则返回表达式2的值;不为空,返回表达式1的值。

 

    NVL2   函数

       格式:NVL2(表达式1,表达式2,表达式3)

       作用:测试表达式的值,表达式1不为空,返回表达式2的值,如果为空,则返回表达式3的值。

 

 

    NULLIF  相等为空

       格式:NULLIF (表达式1,表达式2)

       作用:比较表达式1和表达式2的值,如果两个相等则返回为空,否则返回表达式1的值。

 

    COALESCE    找非空

       格式:COALESCE (表达式1,表达式2,表达式3,...,表达式n)

       作用:返回第一个不为空的值,如果所有的都为空,则返回NULL

 

 

六、SELECT语句的用法

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

FROM table;

 

七、演示   */

 

--选择所有字段


SQL> SET LINESIZE 200

SQL> SELECT * FROM SCOTT.EMP;

 

     EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO

---------- ---------- --------- ---------- --------- ---------- ---------- ----------

      7369 SMITH      CLERK           7902 17-DEC-80        800                    20

      7499 ALLEN      SALESMAN        7698 20-FEB-81       1600        300         30

      7521 WARD       SALESMAN        7698 22-FEB-81       1250        500         30

      7566 JONES      MANAGER         7839 02-APR-81       2975                    20

      7654 MARTIN     SALESMAN        7698 28-SEP-81       1250       1400         30

 

--选择部分字段

SQL> SELECT EMPNO,ENAME,SAL FROM SCOTT.EMP;

 

     EMPNO ENAME             SAL

---------- ---------- ----------

      7369 SMITH             800

      7499 ALLEN            1600

      7521 WARD             1250

 

--算术加减运算

SQL> SELECT EMPNO,ENAME,SAL + 300 FROM SCOTT.EMP;

 

     EMPNO ENAME         SAL+300

---------- ---------- ----------

      7369 SMITH            1100

      7499 ALLEN            1900

      7521 WARD             1550

 

--优先级

SQL> SELECT EMPNO,ENAME,12 * (SAL + 300) FROM SCOTT.EMP;

 

     EMPNO ENAME      12*(SAL+300)

---------- ---------- ------------

      7369 SMITH             13200

      7499 ALLEN             22800

      7521 WARD              18600

 

SQL> SELECT EMPNO,ENAME,12 * SAL + 300 FROM SCOTT.EMP;

 

     EMPNO ENAME      12*SAL+300

---------- ---------- ----------

      7369 SMITH            9900

      7499 ALLEN           19500

      7521 WARD            15300

 

--NULL,记录中COMM存在为NULL的情况

SQL> SELECT EMPNO,ENAME,SAL,COMM FROM SCOTT.EMP;

 

     EMPNO ENAME             SAL       COMM

---------- ---------- ---------- ----------

      7369 SMITH             800

      7499 ALLEN            1600        300

      7521 WARD             1250        500

      7566 JONES            2975

 

--NULL运算,结果为NULL

SQL> SELECT EMPNO,ENAME,SAL,COMM + 300 FROM SCOTT.EMP;

 

     EMPNO ENAME             SAL   COMM+300

---------- ---------- ---------- ----------

      7369 SMITH             800

      7499 ALLEN            1600        600

      7521 WARD             1250        800

      7566 JONES            2975

 

--COMM不为NULL的记录的COMM乘以

SQL> SELECT EMPNO,ENAME,SAL,COMM * 12 FROM SCOTT.EMP  WHERE COMM IS NOT NULL  ——注意 where子句 这里的is null 或者 is not null 的写法。

 

     EMPNO ENAME             SAL    COMM*12

---------- ---------- ---------- ----------

      7499 ALLEN            1600       3600

      7521 WARD             1250       6000

      7654 MARTIN           1250      16800

      7844 TURNER           1500          0

 

--字段别名,字段后用AS 别名,AS可以省略

SQL> SELECT EMPNO,ENAME AS EmpName,SAL Salary FROM SCOTT.EMP;

 

     EMPNO EMPNAME        SALARY

---------- ---------- ----------

      7369 SMITH             800

      7499 ALLEN            1600

      7521 WARD             1250

      7566 JONES            2975

--DISTINCT,过滤重复行

SQL> SELECT DISTINCT EMPNO,ENAME FROM SCOTT.EMP;

 

--连接操作符,通过二个垂直的条描述(||),注意,日期和文字数值一定嵌入在单引号里面

SQL> SELECT EMPNO,ENAME || ' IS A ' ||JOB AS POSITION FROM SCOTT.EMP;——连接操作符

 

     EMPNO POSITION

---------- -------------------------

      7369 SMITH IS A CLERK

      7499 ALLEN IS A SALESMAN

      7521 WARD IS A SALESMAN

 

--DESC table_name,显示表结构信息

SQL> DESC SCOTT.EMP

 Name                                      Null?    Type

 ----------------------------------------- -------- ----------------------------

 EMPNO                                     NOT NULL NUMBER(4)

 ENAME                                              VARCHAR2(10)

 JOB                                                VARCHAR2(9)

 MGR                                                NUMBER(4)

 HIREDATE                                           DATE

 SAL                                                NUMBER(7,2)

 COMM                                               NUMBER(7,2)

 DEPTNO                                             NUMBER(2)

 

 --NVL的用法

 SQL> SELECT EMPNO,ENAME,NVL(TO_CHAR(COMM),'Not Applicable') FROM SCOTT.EMP; ——如果第一个参数不空,则返回第一个参数,如果为空,返回第二个参数。

 

     EMPNO ENAME      NVL(TO_CHAR(COMM),'NOTAPPLICABLE')

---------- ---------- ----------------------------------------

      7369 SMITH      Not Applicable

      7499 ALLEN      300

      7521 WARD       500

      7566 JONES      Not Applicable

     

--NVL2的用法

SQL> SELECT empno,ename,sal,NVL2(TO_CHAR(comm),12 * (sal + comm),sal) AS Income FROM scott.emp;—— 第一个参数有(即不空),返2,第一个参数无(即空)返3.简记为:有2空3. 用来算一年收入不错,有年终奖的加上,没年中奖的直接得出。。

 

     EMPNO ENAME             SAL     INCOME

---------- ---------- ---------- ----------

      7369 SMITH             800        800

      7499 ALLEN            1600      22800

      7521 WARD             1250      21000

      7566 JONES            2975       2975

 

--NULLIF的用法

--等价于CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END

      SQL> SELECT e.last_name, NULLIF(e.job_id, j.job_id) "Old Job ID" ——第一个参数等于第二个参数,返回空,否则返回第一个参数。用来比较新旧不错,若新的等于旧的,则不返回,若不等,则返回新的。

  2     FROM hr.employees e, hr.job_history j

  3     WHERE e.employee_id = j.employee_id

  4     ORDER BY last_name, "Old Job ID";

 

LAST_NAME                 Old Job ID

------------------------- ----------

De Haan                   AD_VP

Hartstein                 MK_MAN

Kaufling                  ST_MAN

Kochhar                   AD_VP

Kochhar                   AD_VP

Raphaely                  PU_MAN

Taylor                    SA_REP

Taylor

Whalen                    AD_ASST

Whalen

 

--下面是使用CASE WHEN的等价用法

SQL> SELECT e.last_name, CASE WHEN e.job_id = j.job_id THEN NULL ELSE e.job_id END AS "Old Job ID"

  2  FROM hr.employees e, hr.job_history j

  3  WHERE e.employee_id = j.employee_id

  4  ORDER BY last_name, "Old Job ID";

 

LAST_NAME                 Old Job ID

------------------------- ----------

De Haan                   AD_VP

Hartstein                 MK_MAN

Kaufling                  ST_MAN

Kochhar                   AD_VP

Kochhar                   AD_VP

Raphaely                  PU_MAN

Taylor                    SA_REP

Taylor

Whalen                    AD_ASST

Whalen

 

--COALESCE的用法

--COALESCE(exp1,exp2)包含两个表达式时,等价于CASE WHEN exp1 IS NOT NULL THEN exp1 ELSE exp2 END

--COALESCE (expr1, expr2, ..., exprn), for n>=3

--n >= 3时,等价于

--CASE WHEN expr1 IS NOT NULL THEN expr1

--   ELSE COALESCE (expr2, ..., exprn) END

SQL> SELECT product_id, list_price, min_price,

  2  COALESCE(0.9*list_price, min_price, 5) "Sale"

  3  FROM oe.product_information

  4  WHERE supplier_id = 102050

  5  ORDER BY product_id, list_price, min_price, "Sale"

 

PRODUCT_ID LIST_PRICE  MIN_PRICE       Sale

---------- ---------- ---------- ----------

      1769         48                  43.2

      1770                    73         73

      2378        305        247      274.5

      2382        850        731        765

      3355                                5


相关文章
|
16天前
|
SQL 存储 人工智能
Vanna:开源 AI 检索生成框架,自动生成精确的 SQL 查询
Vanna 是一个开源的 Python RAG(Retrieval-Augmented Generation)框架,能够基于大型语言模型(LLMs)为数据库生成精确的 SQL 查询。Vanna 支持多种 LLMs、向量数据库和 SQL 数据库,提供高准确性查询,同时确保数据库内容安全私密,不外泄。
83 7
Vanna:开源 AI 检索生成框架,自动生成精确的 SQL 查询
|
23天前
|
SQL Java
使用java在未知表字段情况下通过sql查询信息
使用java在未知表字段情况下通过sql查询信息
35 8
|
1月前
|
SQL 安全 PHP
PHP开发中防止SQL注入的方法,包括使用参数化查询、对用户输入进行过滤和验证、使用安全的框架和库等,旨在帮助开发者有效应对SQL注入这一常见安全威胁,保障应用安全
本文深入探讨了PHP开发中防止SQL注入的方法,包括使用参数化查询、对用户输入进行过滤和验证、使用安全的框架和库等,旨在帮助开发者有效应对SQL注入这一常见安全威胁,保障应用安全。
54 4
|
1月前
|
SQL 监控 关系型数据库
SQL语句当前及历史信息查询-performance schema的使用
本文介绍了如何使用MySQL的Performance Schema来获取SQL语句的当前和历史执行信息。Performance Schema默认在MySQL 8.0中启用,可以通过查询相关表来获取详细的SQL执行信息,包括当前执行的SQL、历史执行记录和统计汇总信息,从而快速定位和解决性能瓶颈。
|
1月前
|
SQL 存储 缓存
如何优化SQL查询性能?
【10月更文挑战第28天】如何优化SQL查询性能?
121 10
|
1月前
|
SQL 关系型数据库 MySQL
|
2月前
|
SQL 数据库 开发者
功能发布-自定义SQL查询
本期主要为大家介绍ClkLog九月上线的新功能-自定义SQL查询。
|
2月前
|
SQL 移动开发 Oracle
SQL语句实现查询连续六天数据的方法与技巧
在数据库查询中,有时需要筛选出符合特定时间连续性条件的数据记录
|
2月前
|
SQL Java 数据库连接
如何使用`DriverManager.getConnection()`连接数据库,并利用`PreparedStatement`执行参数化查询,有效防止SQL注入。
【10月更文挑战第6天】在代码与逻辑交织的世界中,我从一名数据库新手出发,通过不断探索与实践,最终成为熟练掌握JDBC的开发者。这段旅程充满挑战与惊喜,从建立数据库连接到执行SQL语句,再到理解事务管理和批处理等高级功能,每一步都让我对JDBC有了更深的认识。示例代码展示了如何使用`DriverManager.getConnection()`连接数据库,并利用`PreparedStatement`执行参数化查询,有效防止SQL注入。
116 5
|
2月前
|
SQL 数据挖掘 数据库
SQL查询每秒的数据:技巧、方法与性能优化
id="">SQL查询功能详解 SQL(Structured Query Language,结构化查询语言)是一种专门用于与数据库进行沟通和操作的语言
下一篇
DataWorks