MySQL - SELECT 语句



MySQL SELECT 语句

SELECT 语句用于从一个或多个(现有)表中检索行。您可以与该语句一起使用各种子句。

语法

以下是 SELECT 语句的基本语法:

SELECT select_expr FROM table_references WHERE where_condition

其中,select_expr 是指示您需要检索的列的表达式,table_reference 是您可以从中检索行的表的名称或引用。

可以使用 "*" 选择表中的所有列,只需将表的名称作为 table_reference 传递,即可检索所有记录。

示例

假设我们使用 CREATE TABLE 语句在 MySQL 数据库中创建了一个名为 **Sales** 的表,如下所示:

CREATE TABLE sales(
   ID INT,
   ProductName VARCHAR(255),
   CustomerName VARCHAR(255),
   DispatchDate date,
   DeliveryTime time,
   Price INT,
   Location VARCHAR(255)
);

以下查询在上面创建的表中插入一行:

INSERT INTO SALES values
(1, 'Key-Board', 'Raja', DATE('2019-09-01'), TIME('11:00:00'), 7000, 
'Hyderabad'),
(2, 'Earphones', 'Roja', DATE('2019-05-01'), TIME('11:00:00'), 2000, 
'Vishakhapatnam'),
(3, 'Mouse', 'Puja', DATE('2019-03-01'), TIME('10:59:59'), 3000, 
'Vijayawada'),
(4, 'Mobile', 'Vanaja', DATE('2019-03-01'), TIME('10:10:52'), 9000, 
'Chennai'),
(5, 'Headset', 'Jalaja', DATE('2019-04-06'), TIME('11:08:59'), 6000, 
'Goa');

以下查询使用 SELECT 语句检索价格值大于 6000 的 Sales 表的记录:

SELECT * FROM SALES WHERE PRICE>6000;

输出

以下是上述查询的输出:

ID ProductName CustomerName DispatchDate DeliveryTime Price Location
1 键盘 Raja 2019-09-01 11:00:00 7000 海德拉巴
4 手机 Vanaja 2019-03-01 10:10:52 9000 钦奈

选择特定列

通过将所需的列名称指定为 selectexpr,您可以检索表的记录的所需列值。以下查询从 Sales 表中检索 ID、CustomerName、ProductName、Price 列:

SELECT ID, CustomerName, ProductName, Price FROM SALES;

输出

上述查询产生以下输出:

ID CustomerName ProductName Price
1 Raja 键盘 7000
2 Roja 耳机 2000
3 Puja 鼠标 3000
4 Vanaja 手机 9000
5 Jalaja 耳机 6000

无表选择

使用 SELECT 语句,您还可以检索所需的计算结果,而无需提供表引用:

SELECT 1250*2256;

输出

以下是上述查询的输出:

1250*2256
2820000

select_expr 的别名

您可以使用别名列名作为 select 表达式。

假设我们使用 CREATE 语句在 MySQL 数据库中创建了一个名为 MyPlayers 的表,如下所示

CREATE TABLE Players(
   ID INT,
   First_Name VARCHAR(255),
   Last_Name VARCHAR(255),
   Date_Of_Birth date,
   Place_Of_Birth VARCHAR(255),
   Country VARCHAR(255),
   PRIMARY KEY (ID)
);

现在,我们将使用 INSERT 语句在 Players 表中插入 7 条记录:

Insert into Players values
(1, 'Shikhar', 'Dhawan', DATE('1981-12-05'), 'Delhi', 'India'),
(2, 'Jonathan', 'Trott', DATE('1981-04-22'), 'CapeTown', 'SouthAfrica'),
(3, 'Kumara', 'Sangakkara', DATE('1977-10-27'), 'Matale', 'Srilanka'),
(4, 'Virat', 'Kohli', DATE('1988-11-05'), 'Delhi', 'India'),
(5, 'Rohit', 'Sharma', DATE('1987-04-30'), 'Nagpur', 'India'),
(6, 'Ravindra', 'Jadeja', DATE('1988-12-06'), 'Nagpur', 'India'),
(7, 'James', 'Anderson', DATE('1982-06-30'), 'Burnley', 'England');

以下查询使用 AS 子句将 First_Name、Last_Name 值检索为 name:

SELECT CONCAT(last_name,' ',first_name) AS name, Country FROM 
Players ORDER BY name;

输出

上述 mysql 查询生成以下输出:

name Country
Anderson James 英格兰
Dhawan Shikhar 印度
Jadeja Ravindra 印度
Kohli Virat 印度
Sharma Rohit 印度
Trott Jonathan 南非

使用 ORDER BY 子句

ORDER BY 子句用于根据指定的列排列表的记录,我们可以将此子句与 TABLE 语句一起使用,如下所示:

TABLE table_name ORDER BY column_name;

其中 table_name 是表名,column_name 是您需要根据其排列指定表的列名。

示例

假设我们使用 CREATE 语句创建了一个名为 EMP 的表,如下所示:

CREATE TABLE EMP (
   FIRST_NAME CHAR(20) NOT NULL,
   LAST_NAME CHAR(20),
   AGE INT,
   SEX CHAR(1),
   INCOME FLOAT
);

现在,让我们使用 INSERT 语句在上面创建的表中插入值,如下所示:

INSERT INTO EMP VALUES
('Krishna', 'Sharma', 19, 'M', 2000),
('Raj', 'Kandukuri', 20, 'M', 7000),
('Ramya', 'Ramapriya', 25, 'F', 5000),
('Alexandra', 'Botez', 26, 'F', 2000);

以下查询根据 FIRST_NAME 列排列并检索 EMP 表的内容:

SELECT * FROM EMP ORDER BY FIRST_NAME;

输出

以下是上述 mysql 查询的输出:

FIRST_NAME LAST_NAME AGE SEX INCOME
Alexandra Botez 26 F 2000
Krishna Sharma 19 M 2000
Raj Kandukuri 20 M 7000
Ramya Ramapriya 25 F 5000

使用 LIMIT 子句

在获取记录时,如果想限制特定数量的记录,可以使用MySQL的LIMIT子句。此子句也可以与TABLE语句一起使用,如下所示:

SELECT * FROM table_name LIMIT lt_number OFFSET off_number;

其中,table_name是表名,lt_number是要检索的记录数,off_number是偏移量。

如果需要从第n条记录(非第一条)开始限制记录,可以使用OFFSET与LIMIT一起使用。

示例

以下查询根据INCOME列对EMP表的记录进行排序,并检索前两条记录:

SELECT * FROM EMP ORDER BY INCOME LIMIT 2;

输出

上述MySQL查询将生成如下所示的输出:

FIRST_NAME LAST_NAME AGE SEX INCOME
Krishna Sharma 19 M 2000
Alexandra Botez 26 F 2000

使用 UNION 子句

MySQL UNION子句用于组合两个或多个SELECT/TABLE语句的结果,但不返回任何重复的行。

要使用UNION子句,每个SELECT语句必须:

  • 选择相同数量的列。
  • 具有相同数量的列表达式。
  • 具有相同的数据类型,并且
  • 顺序相同

以下是使用UNION子句(与TABLE语句一起使用)的语法:

TABLE table_name1 UNION TABLE table_name2;

示例

假设我们使用如下所示的CREATE语句创建了一个名为Student的表:

CREATE TABLE Student (
   Name VARCHAR(20), 
   age INT
);

现在,让我们向Student表中插入三条记录:

INSERT INTO Student VALUES 
('Krishna', 22),
('Raju', 20),
('Rahman', 21);

您可以如下所示验证student表的内容:

SELECT * FROM Student;

输出

以下是上述查询的输出:

姓名 年龄
Krishna 22
Raju 20
Rahman 21

假设我们有另一个表,行数相同(以及数据类型):

CREATE TABLE Staff (
   Name VARCHAR(20), 
   age INT
);

现在,让我们向Staff表中插入几条记录:

INSERT INTO Staff VALUES 
('Amit', 35),
('Nanda', 33),
('Swathi', 39);

您可以如下所示验证student表的内容:

SELECT * FROM Staff;

输出

以下是上述查询的输出:

姓名 年龄
Amit 35
Nanda 33
Swathi 39

以下查询使用JOIN子句组合上述两个表:

SELECT * FROM STUDENT UNION SELECT * FROM STAFF;

输出

上述 mysql 查询生成以下输出:

姓名 年龄
Krishna 22
Raju 20
Rahman 21
Amit 35
Nanda 33
Swathi 39

UNION 中的 ORDER BY 和 LIMIT

您也可以对两个SELECT语句使用ORDER BY或LIMIT子句,并使用UNION将它们连接起来。为此,请将两个SELECT语句放在括号中,然后使用UNION连接它们。

示例

(SELECT * FROM Staff ORDER BY age LIMIT 2) UNION 
(SELECT * FROM Student ORDER BY age LIMIT 2);

输出

上述查询将生成如下所示的输出:

姓名 年龄
Nanda 33
Amit 35
Raju 20
Rahman 21

JOIN 子句

当您将数据分成两个表时,您可以使用连接从这两个表中获取组合的记录。

语法

以下是MySQL JOIN子句的语法:

escaped_table_reference: {
   table_reference
   | { JOIN table_reference }
}

示例

假设我们使用以下CREATE语句创建了一个名为EMPLOYEE的表:

CREATE TABLE EMPLOYEE(
   ID INT NOT NULL,
   FIRST_NAME CHAR(20) NOT NULL,
   LAST_NAME CHAR(20),
   AGE INT,
   SEX CHAR(1),
   INCOME FLOAT,
   CONTACT INT
);

现在,让我们向EMPLOYEE表中插入几条记录:

INSERT INTO Employee VALUES
(101, 'Ramya', 'Rama Priya', 27, 'F', 9000, 101),
(102, 'Vinay', 'Bhattacharya', 20, 'M', 6000, 102),
(103, 'Sharukh', 'Sheik', 25, 'M', 8300, 103),
(104, 'Sarmista', 'Sharma', 26, 'F', 10000, 104);

假设我们使用以下CREATE语句创建了另一个名为CONTACT的表:

CREATE TABLE CONTACT(
   ID INT NOT NULL,
   EMAIL CHAR(20) NOT NULL,
   PHONE LONG,
   CITY CHAR(20)
);

现在,让我们向CONTACT表中插入四条记录:

INSERT INTO CONTACT (ID, EMAIL, CITY) VALUES
(101, 'ramya@mymail.com', 'Hyderabad'),
(102, 'vinay@mymail.com', 'Vishakhapatnam'),
(103, 'sharukha@mymail.com', 'Pune'),
(104, 'sarmista@mymail.com', 'Mumbai');

以下语句检索组合这两个表中的值的数据:

SELECT * from EMPLOYEE JOIN CONTACT ON EMPLOYEE.CONTACT = CONTACT.ID;

注意: 对于以下格式的输出,您可以在上述查询的末尾使用“\G”。

输出

以下是上述查询的输出:

************* 1. row *************
        ID: 101
FIRST_NAME: Ramya
 LAST_NAME: Rama Priya
       AGE: 27
       SEX: F
    INCOME: 9000
   CONTACT: 101
        ID: 101
     EMAIL: ramya@mymail.com
     PHONE: NULL
      CITY: Hyderabad
************* 2. row *************
        ID: 102
FIRST_NAME: Vinay
 LAST_NAME: Bhattacharya
       AGE: 20
       SEX: M
    INCOME: 6000
   CONTACT: 102
        ID: 102
     EMAIL: vinay@mymail.com
     PHONE: NULL
      CITY: Vishakhapatnam
************* 3. row *************
        ID: 103
FIRST_NAME: Sharukh
 LAST_NAME: Sheik
       AGE: 25
       SEX: M
    INCOME: 8300
   CONTACT: 103
        ID: 103
     EMAIL: sharukha@mymail.com
     PHONE: NULL
      CITY: Pune
************* 4. row *************
        ID: 104
FIRST_NAME: Sarmista
 LAST_NAME: Sharma
       AGE: 26
       SEX: F
    INCOME: 10000
   CONTACT: 104
        ID: 104
     EMAIL: sarmista@mymail.com
     PHONE: NULL
      CITY: Mumbai

连接两个查询时,您可以使用AS子句在查询中使用表的别名,如下所示:

SELECT t1.FIRST_NAME, t2.email FROM employee AS t1 INNER JOIN 
contact AS t2 ON t1.id = t2.id;

输出

上述MySQL查询产生以下输出:

FIRST_NAME 邮箱
Ramya ramya@mymail.com
Vinay vinay@mymail.com
Sharukh sharukha@mymail.com
Sarmista sarmista@mymail.com

SELECT ... INTO 语句

使用SELECT ..... INTO语句,您可以存储语句的结果。您可以将结果存储到变量(或多个变量)、输出文件和转储文件中,其中存储单行。以下是此语句的语法:

SELECT select_expression INTO variable_list
Or,
SELECT select_expression INTO OUTFILE output_file
Or,
SELECT select_expression INTO DUMPFILE dump_file

示例

假设我们创建了一个名为emp的表,并使用以下查询填充它:

CREATE TABLE Emp (
   ID INT, 
   Name VARCHAR(255), 
   Salary INT, 
   Location VARCHAR(255)
);

现在,让我们向Emp表中插入几条记录:

INSERT INTO Emp VALUES
(101, 'Raju', 35000, 'Bangalore'),
(102, 'Raman', 45000, 'Vishakhapatnam'),
(103, 'Rahman', 55000, 'Hyderabad');

以下查询从上面创建的表中检索员工的姓名和位置,并将其存储在变量中:

SELECT Name, Location INTO @name, @loc FROM Emp where ID =101;

您可以验证变量的值,如下所示:

SELECT @name, @loc;

输出

以下是上述 mysql 查询的输出:

@name @loc
Raju Bangalore

以下查询检索emp表的内容并将其存储在本地文本文件中:

SELECT Name, Location INTO OUTFILE 'Folder_Location/sample.txt' FROM Emp;

如果您验证sample.txt文件,您可以看到emp表的记录,如下所示:

Sample.txt

Raju Bangalore
Raman Vishakhapatnam
Rahman Hyderabad
广告
© . All rights reserved.