1. 首页 > Oracle教程 > 正文

Oracle教程FG051-SQL查询基础

1. SELECT语句基础

SELECT语句是SQL中最基本也是最常用的语句,用于从数据库表中检索数据。掌握SELECT语句的基本语法是学习SQL的基础。更多学习教程www.fgedu.net.cn

SELECT语句语法:SELECT column1, column2, … FROM table_name WHERE condition ORDER BY column_name;

2. 查询所有列

使用通配符*可以查询表中的所有列。

— 创建示例表
CREATE TABLE employees (
employee_id NUMBER(6),
first_name VARCHAR2(20),
last_name VARCHAR2(25),
email VARCHAR2(25),
phone_number VARCHAR2(20),
hire_date DATE,
job_id VARCHAR2(10),
salary NUMBER(8,2),
commission_pct NUMBER(2,2),
manager_id NUMBER(6),
department_id NUMBER(4)
);– 插入示例数据
INSERT INTO employees VALUES (100, ‘Steven’, ‘King’, ‘SKING’, ‘515.123.4567’, TO_DATE(‘2003-06-17’, ‘YYYY-MM-DD’), ‘AD_PRES’, 24000, NULL, NULL, 90);INSERT INTO employees VALUES (101, ‘Neena’, ‘Kochhar’, ‘NKOCHHAR’, ‘515.123.4568’, TO_DATE(‘2005-09-21’, ‘YYYY-MM-DD’), ‘AD_VP’, 17000, NULL, 100, 90);INSERT INTO employees VALUES (102, ‘Lex’, ‘De Haan’, ‘LDEHAAN’, ‘515.123.4569’, TO_DATE(‘2001-01-13’, ‘YYYY-MM-DD’), ‘AD_VP’, 17000, NULL, 100, 90);INSERT INTO employees VALUES (103, ‘Alexander’, ‘Hunold’, ‘AHUNOLD’, ‘590.423.4567’, TO_DATE(‘2006-01-03’, ‘YYYY-MM-DD’), ‘IT_PROG’, 9000, NULL, 102, 60);INSERT INTO employees VALUES (104, ‘Bruce’, ‘Ernst’, ‘BERNST’, ‘590.423.4568’, TO_DATE(‘2007-05-21’, ‘YYYY-MM-DD’), ‘IT_PROG’, 6000, NULL, 103, 60);– 查询所有列
SELECT * FROM employees;EMPLOYEE_ID EMP_NAME EMP_EMP_EMP_LAST_NAME EMAIL PHONE_NUMBER HIRE_DATE JOB_ID SALARY COMMISSION_PCT MANAGER_ID DEPARTMENT_ID
———– ——————– ————————- ————————- ——————– ———- ———- ———- ————– ———- ————-
100 Steven King SKING 515.123.4567 17-JUN-03 AD_PRES 24000 90
101 Neena Kochhar NKOCHHAR 515.123.4568 21-SEP-05 AD_VP 17000 100 90
102 Lex De Haan LDEHAAN 515.123.4569 13-JAN-01 AD_VP 17000 100 90
103 Alexander Hunold AHUNOLD 590.423.4567 03-JAN-06 IT_PROG 9000 102 60
104 Bruce Ernst BERNST 590.423.4568 21-MAY-07 IT_PROG 6000 103 60

3. 查询特定列

指定需要查询的列名,可以减少数据传输量,提高查询效率。

— 查询特定列
SELECT employee_id, first_name, last_name, salary FROM employees;EMPLOYEE_ID EMP_NAME EMP_EMP_EMP_LAST_NAME SALARY
———– ——————– ————————- ———-
100 Steven King 24000
101 Neena Kochhar 17000
102 Lex De Haan 17000
103 Alexander Hunold 9000
104 Bruce Ernst 6000

4. 去重查询

使用DISTINCT关键字可以去除查询结果中的重复行。

— 查询不同的部门ID
SELECT DISTINCT department_id FROM employees;DEPARTMENT_ID
————-
60
90

— 查询不同的工作ID和部门ID组合
SELECT DISTINCT job_id, department_id FROM employees;JOB_ID DEPARTMENT_ID
———- ————-
AD_PRES 90
AD_VP 90
IT_PROG 60

5. 列别名

使用列别名可以为查询结果中的列指定更有意义的名称。

— 使用列别名
SELECT employee_id AS “员工ID”,
first_name || ‘ ‘ || last_name AS “员工姓名”,
salary AS “工资”
FROM employees;员工ID 员工姓名 工资
—— ——————– ———-
100 Steven King 24000
101 Neena Kochhar 17000
102 Lex De Haan 17000
103 Alexander Hunold 9000
104 Bruce Ernst 6000

— 使用空格分隔的别名
SELECT employee_id 员工ID,
first_name || ‘ ‘ || last_name 员工姓名,
salary 工资
FROM employees;员工ID 员工姓名 工资
—— ——————– ———-
100 Steven King 24000
101 Neena Kochhar 17000
102 Lex De Haan 17000
103 Alexander Hunold 9000
104 Bruce Ernst 6000

6. 字面量和表达式

在SELECT语句中可以使用字面量和表达式。

— 使用字面量和表达式
SELECT employee_id,
first_name,
last_name,
salary,
‘Active’ AS status,
salary * 12 AS annual_salary
FROM employees;EMPLOYEE_ID EMP_NAME EMP_EMP_EMP_LAST_NAME SALARY STATUS ANNUAL_SALARY
———– ——————– ————————- ———- ——- ————-
100 Steven King 24000 Active 288000
101 Neena Kochhar 17000 Active 204000
102 Lex De Haan 17000 Active 204000
103 Alexander Hunold 9000 Active 108000
104 Bruce Ernst 6000 Active 72000

7. 排序查询

使用ORDER BY子句可以对查询结果进行排序。

— 按工资升序排序
SELECT employee_id, first_name, last_name, salary
FROM employees
ORDER BY salary;EMPLOYEE_ID EMP_NAME EMP_EMP_EMP_LAST_NAME SALARY
———– ——————– ————————- ———-
104 Bruce Ernst 6000
103 Alexander Hunold 9000
101 Neena Kochhar 17000
102 Lex De Haan 17000
100 Steven King 24000

— 按工资降序排序
SELECT employee_id, first_name, last_name, salary
FROM employees
ORDER BY salary DESC;EMPLOYEE_ID EMP_NAME EMP_EMP_EMP_LAST_NAME SALARY
———– ——————– ————————- ———-
100 Steven King 24000
101 Neena Kochhar 17000
102 Lex De Haan 17000
103 Alexander Hunold 9000
104 Bruce Ernst 6000

— 按多个列排序
SELECT employee_id, department_id, salary
FROM employees
ORDER BY department_id, salary DESC;EMPLOYEE_ID DEPARTMENT_ID SALARY
———– ————- ———-
103 60 9000
104 60 6000
100 90 24000
101 90 17000
102 90 17000

8. 最佳实践

风哥提示:SQL查询基础的最佳实践:
1. 尽量指定需要查询的列,避免使用SELECT *
2. 使用列别名使查询结果更易读
3. 合理使用DISTINCT去除重复数据
4. 使用ORDER BY对结果进行排序
5. 避免在SELECT语句中使用复杂的表达式,影响性能
6. 对于大型表,考虑使用WHERE子句过滤数据
7. 使用适当的数据类型,确保查询结果的准确性
8. 定期分析查询性能,优化查询语句
9. 使用绑定变量,提高查询效率和安全性
10. 遵循SQL编码规范,保持代码的可读性

生产环境建议:在生产环境中,应避免使用SELECT *查询,特别是对于大型表。应该只查询需要的列,减少数据传输量和提高查询效率。同时,合理使用索引和WHERE子句,进一步优化查询性能。

更多视频教程www.fgedu.net.cn

学习交流加群风哥微信: itpux-com

学习交流加群风哥QQ113257174

更多学习教程公众号风哥教程itpux_com

from oracle:www.itpux.com

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息