SQL SELECT 语句
SELECT 语句是在结构化查询语言中最常用的命令。它用于从一个或多个数据库表和视图中访问记录。它还检索我们想要的符合条件的选定数据。
通过使用这个命令,我们还可以访问表中特定列的特定记录。SELECT 语句返回的记录存储在称为结果集表的表中。
SQL SELECT 语句的语法
SELECT Column_Name_1, Column_Name_2, ....., Column_Name_N FROM Table_Name;
在这个SELECT语法中, Column_Name_1, Column_Name_2, ….., Column_Name_N 是我们想要读取其数据的表中那些列的名称。
如果你想要访问表中所有行的所有字段,可以使用以下带有*星号的SQL SELECT语法:
SELECT * FROM table_name;
SQL中SELECT语句的示例
这里,我们选取了以下两个不同的SQL示例,它们将帮助您执行SELECT语句以检索记录:
示例1:
首先,我们必须创建新表,然后将一些虚拟记录插入其中。
使用以下查询在SQL中创建 Student_Records 表:
CREATE TABLE Student_Records
(
Student_Id Int PRIMARY KEY,
First_Name VARCHAR (20),
Address VARCHAR (20),
Age Int NOT NULL,
Percentage Int NOT NULL,
Grade VARCHAR (10)
) ;
下面的查询将智能学生的记录插入到 Student_Records 表中:
INSERT INTO Student VALUES (201, Akash, Delhi, 18, 89, A2),
(202, Bhavesh, Kanpur, 19, 93, A1),
(203, Yash, Delhi, 20, 89, A2),
(204, Bhavna, Delhi, 19, 78, B1),
(05, Yatin, Lucknow, 20, 75, B1),
(206, Ishika, Ghaziabad, 19, 51, C1),
(207, Vivek, Goa, 20, 62, B2);
以下 SQL 查询显示了上面的学生记录表的每列的所有值:
SELECT * FROM Student_Records;
以上查询的输出结果是:
Student_ID | First_Name | Address | Age | Percentage | Grade |
---|---|---|---|---|---|
201 | Akash | Delhi | 18 | 89 | A2 |
202 | Bhavesh | Kanpur | 19 | 93 | A1 |
203 | Yash | Delhi | 20 | 89 | A2 |
204 | Bhavna | Delhi | 19 | 78 | B1 |
205 | Yatin | Lucknow | 20 | 75 | B1 |
206 | Ishika | Ghaziabad | 19 | 91 | C1 |
207 | Vivek | Goa | 20 | 80 | B2 |
示例2:
下面的查询显示了上面 Student_Record 表中特定列的值:
SELECT Student_Id, Age, Percentage, Grade FROM Employee;
Student_ID | Age | Percentage | Grade |
---|---|---|---|
201 | 18 | 89 | A2 |
202 | 19 | 93 | A1 |
203 | 20 | 89 | A2 |
204 | 19 | 78 | B1 |
205 | 20 | 75 | B1 |
206 | 19 | 91 | C1 |
207 | 20 | 80 | B2 |
选择具有WHERE子句的SELECT语句
WHERE子句与SELECT语句一起使用,仅返回符合查询中指定条件的表中的行。
在SQL中,WHERE子句不仅与SELECT一起使用,还与其他SQL语句(如UPDATE,ALTER和DELETE语句)一起使用。
SELECT语句的WHERE子句语法
SELECT * FROM Name_of_Table WHERE [condition];
在语法中,我们使用SQL逻辑或比较运算符在WHERE子句中指定条件。
带有WHERE子句的SELECT语句示例
首先,我们必须创建新表,然后将一些虚拟记录插入其中。
使用以下查询在SQL中创建 Employee_Details 表:
CREATE TABLE Employee_Details
(
Employee_ID INT AUTO_INCREMENT PRIMARY KEY,
Emp_Name VARCHAR (50),
Emp_City VARCHAR (20),
Emp_Salary INT NOT NULL,
Emp_Panelty INT NOT NULL
) ;
以下INSERT查询将员工记录插入到Employee_Details表中:
INSERT INTO Employee_Details (Employee_ID, Emp_Name, Emp_City, Emp_Salary, Emp_Panelty) VALUES (101, Anuj, Ghaziabad, 25000, 500),
(102, Tushar, Lucknow, 29000, 1000),
(103, Vivek, Kolkata, 35000, 500),
(104, Shivam, Goa, 22000, 500);
以下的SELECT查询显示了 Employee_Details 表的数据:
SELECT * FROM Employee_Details;
Employee_Id | Emp_Name | Emp_City | Emp_Salary | Emp_Panelty |
---|---|---|---|---|
101 | Anuj | Ghaziabad | 25000 | 500 |
102 | Tushar | Lucknow | 29000 | 1000 |
103 | Vivek | Kolkata | 35000 | 500 |
104 | Shivam | Goa | 22000 | 500 |
以下查询显示了上表中Emp_Panelty为500的员工的记录:
SELECT * FROM Employee_Details WHERE Emp_Panelty = 500;
这个SELECT查询结果显示如下表:
Employee_Id | Emp_Name | Emp_City | Emp_Salary | Emp_Panelty |
---|---|---|---|---|
101 | Anuj | Ghaziabad | 25000 | 500 |
103 | Vivek | Kolkata | 35000 | 500 |
104 | Shivam | Goa | 22000 | 500 |
SQL SELECT语句与GROUP BY子句
GROUP BY子句与SELECT语句一起使用,以显示表中列的共同数据:
SELECT语句与GROUP BY子句的语法
SELECT column_Name_1, column_Name_2, ....., column_Name_N aggregate_function_name(column_Name2) FROM table_name GROUP BY column_Name1;
GROUP BY子句的SELECT语句示例
使用以下查询创建 Cars_Details 表:
CREATE TABLE Cars_Details
(
Car_Number INT PRIMARY KEY,
Car_Name VARCHAR (50),
Car_Price INT NOT NULL,
Car_AmountINT NOT NULL
) ;
以下INSERT查询将汽车记录插入 Cars_Details 表中:
INSERT INTO Cars_Details (Car_Number, Car_Name, Car_Amount, Car_Price)
VALUES (2578, Creta, 3, 1500000),
(9258, Audi, 2, 3000000),
(8233, Venue, 6, 900000),
(6214, Nexon, 7, 1000000);
以下的SELECT查询显示了输出中的值:
SELECT * FROM Cars_Details;
Car_Number | Car_Name | Car_Amount | Car_Price |
---|---|---|---|
2578 | Creta | 3 | 1000000 |
9258 | Audi | 2 | 900000 |
8233 | Venue | 6 | 900000 |
6214 | Nexon | 7 | 1000000 |
以下使用GROUP BY的SELECT查询列出了相同价格的汽车数量:
SELECT COUNT (Car_Name), Car_Price FROM Cars_Details GROUP BY Car_Price;
上面的GROUP BY查询的输出如下:
输出:
Count (Car_Name) | Car_Price |
---|---|
2 | 1000000 |
2 | 900000 |
SQL SELECT Statement with HAVING clause
SELECT语句中的HAVING子句根据GROUP BY子句定义的分组来创建选择。
SELECT语句中HAVING子句的语法
SELECT column_Name_1, column_Name_2, ....., column_Name_N aggregate_function_name(column_Name_2) FROM table_name GROUP BY column_Name1 HAVING ;
选择使用HAVING子句的SELECT语句示例
让我们通过以下CREATE命令在SQL中创建 Employee_Having 表:
CREATE TABLE Employee_Having
(
Employee_Id INT PRIMARY KEY,
Employee_Name VARCHAR (50),
Employee_Salary INT NOT NULL,
Employee_City VARCHAR (50)
) ;
下面的INSERT查询将员工记录插入到Employee_Having表中:
INSERT INTO Employee_Having (Employee_Id, Employee_Name, Employee_Salary, Employee_City)
VALUES (201, Jone, 20000, Goa),
(202, Basant, 40000, Delhi),
(203, Rashet, 80000,Jaipur),
(204, Aunj, 20000, Goa),
(205, Sumit, 50000, Delhi);
下面的SELECT查询显示了Employee_Having表中的值:
SELECT * FROM Employee_Having;
Employee_Id | Employee_Name | Employee_Salary | Employee_City |
---|---|---|---|
201 | Jone | 20000 | Goa |
202 | Basant | 40000 | Delhi |
203 | Rashet | 80000 | Jaipur |
204 | Anuj | 20000 | Goa |
205 | Sumit | 50000 | Delhi |
以下查询显示了上面的Employee_Having表中工资超过5000的员工的总工资:
SELECT SUM (Employee_Salary), Employee_City FROM Employee_Having GROUP BY Employee_City HAVING SUM(Employee_Salary)>5000;
这个带有SELECT语句的HAVING查询显示以下表:
Output:
SUM (Employee_Salary) | Employee_City |
---|---|
90000 | Delhi |
80000 | Jaipur |
使用ORDER BY子句的SELECT语句
使用ORDER BY子句的SQL SELECT语句以排序方式显示记录或行。
ORDER BY子句按升序和降序排列值。一些数据库系统默认按升序排列列的值。
带ORDER BY子句的SELECT语句的语法
SELECT Column_Name_1, Column_Name_2, ....., column_Name_N FROM table_name WHERE [Condition] ORDER BY[column_Name_1, column_Name_2, ....., column_Name_N asc | desc ];
SQL中带有ORDER BY子句的SELECT语句示例
CREATE TABLE Employee_Order
(
Id INT NOT NULL,
FirstName VARCHAR (50),
Salary INT,
City VARCHAR (50)
) ;
以下INSERT查询将员工记录插入Employee_Having表中:
INSERT INTO Employee_Order (Id, FirstName, Salary, City)
VALUES (201, Jone, 20000, Goa),
(202, Basant, 15000, Delhi),
(203, Rashet, 80000,Jaipur),
(204, Aunj, 90000, Goa),
(205, Sumit, 50000, Delhi);
下面的SELECT查询在输出中显示表的值:
SELECT * FROM Employee_Order;
Id | FirstName | Salary | City |
---|---|---|---|
201 | Jone | 20000 | Goa |
202 | Basant | 15000 | Delhi |
203 | Rashet | 80000 | Jaipur |
204 | Anuj | 90000 | Goa |
205 | Sumit | 50000 | Delhi |
以下查询对上面的Employee_Order表按工资降序排序:
SELECT * FROM Employee_Order ORDER BY Emp_Salary DESC;
这个SQL查询将产生如下表的结果:
输出:
Emp_Id | Emp_Name | Emp_Salary | Emp_City |
---|---|---|---|
204 | Anuj | 90000 | Goa |
203 | Rashet | 80000 | Jaipur |
205 | Sumit | 50000 | Delhi |
201 | Jone | 20000 | Goa |
202 | Basant | 15000 | Delhi |