데이터 베이스 MySQL 튜토리얼 数据库的检索语句

数据库的检索语句

Jun 07, 2016 pm 04:06 PM
select 기초적인 데이터 베이스 찾다 용법 단순한 성명

1、SELECT 基本用法 1.1简单的数据检索 1.1.1检索出需要的列 只要执行SELECT * FROM 名即可。SELECT * FROM T_Employee 。SELECT * FROM T_Employee语句会把数据库的所有列的信息从数据库中读出来,缓存到内存中。检索出所有的列的 SQL 语句为SELECT * FROM

1、SELECT 基本用法

1.1简单的数据检索

1.1.1检索出需要的列

只要执行“SELECT * FROM 名”即可。SELECT * FROM T_Employee 。SELECT * FROM T_Employee语句会把数据库的所有列的信息从数据库中读出来,缓存到内存中。检索出所有的列的 SQL 语句为“SELECT * FROM T_Employee” ,其中的星号“*”就意味着“所有列” ,那么我们只要将星号 “*”替换成我们要检索的列名就可以了。如SELECT FNumber FROM T_Employee 。只要在 SELECT 语句后列出各个列的列名就可以了,需要注意的就是各个列之间要用半角的逗号“,”分隔开。比如我们执行下面的 SQL 语句:SELECT FName,FAge FROM T_Employee 。

1.1.2列别名

别名的定义格式为 “列名 AS 别名” , 比如我们要为 FNumber 字段取别名为 Number14
,FName 字段取别名为 Name、FAge 字段取别名为 Age、为 FSalary字段取别名为 Salary,那么编写下面的 SQL 即可:SELECT FNumber AS Number1,FName AS Name,FAge AS Age,FSalary AS Salary FROM
T_Employee 。定义别名的时候“AS”不是必须的,是可以省略的,比如下面的 SQL 也是正确的:
SELECT FNumber Number1,FName Name,FAge Age,FSalary Salary FROM T_Employee 。

1.1.3按条件过滤

由于将表中所有的数据都从数据库中检索出来,所以会有非常大的内存消耗以及网络资源消耗。 需要逐条检索每条数据是否符合过滤条件,所以检索速度非常慢,当数据量大的时候这种速度是让人无法忍受的。无法实现复杂的过滤条件。SELECT FName FROM T_Employee WHERE FSalary25 。使用 WHERE 子句只需指定过滤条件就可以,我们无需关心数据库系统是如果进行查找的,数据库会采用适当的优化算法进行查询,大大降低了 CPU 资源的占用。

SQL 标准中规定了下面几种聚合函数:

\

这几个聚合函数都有一个参数,这个参数表示要统计的字段名。 第一个例子是查询年龄大于 25 岁的员工的最高工资,执行下面的 SQL:
SELECT MAX(FSalary) FROM T_Employee WHERE FAge>25 。

为了方面的引用查询的结果, 也可以为聚合函数的计算结果指定一个别名, 执行下面的 SQL:

SELECT MAX(FSalary) as MAX_SALARY FROM T_Employee WHERE FAge>25 。

SELECT AVG(FAge) FROM T_Employee WHERE FSalary>3800 。

SELECT SUM(FSalary) FROM T_Employee 。

SELECT MIN(FSalary),MAX(FSalary) FROM T_Employee 。

最后一个介绍的函数就是统计记录数量的 COUNT,这个函数有一特别,因为它的即可以像其他聚合函数一样使用字段名做参数, 也可以使用星号 “*” 做为参数。 我们执行下面的 SQL:
SELECT COUNT(*),COUNT(FNumber) FROM T_Employee 。

COUNT(*)统计的是结果集的总条数,而COUNT(FName)统计的则是除了结果集中 FName 不为空值(也就是不等于 NULL)的记录的总条数。

1.1.4排序

SELECT 语句允许使用 ORDER BY 子句来执行结果集的排序方式。ORDER BY 子句位于 SELECT 语句的末尾,它允许指定按照一个列或者多个列进行排序,还可以指定排序方式是升序(从小到大排列)还是降序(从大到小排列)。比如下面的 SQL 语句演示了按照年龄排序所有员工信息的列表:
SELECT * FROM T_EmployeeORDER BY FAge ASC 。

ASC 代表升序,升序是默认的排序方式。SELECT * FROM T_Employee ORDER BY FAge 。

如果需要按照降序排列,那么只要将 ASC 替换为 DESC 即可,其中 DESC 代表降序。执行下面的 SQL 语句:SELECT * FROM T_Employee ORDER BY FAge DESC 。

因为 ORDER BY语句允许指定多个排序列,各个列之间使用逗号隔开即可。执行下面的 SQL 语句:
SELECT * FROM T_Employee ORDER BY FAge DESC,FSalary DESC 。 可以看到年龄相同的记录按照工资从高到低的顺序排列了。对于多个排序规则,数据库系统会按照优先级进行处理。数据库系统首先按照第一个排序规则进行排序; 如果按照第一个排序规则无法区分两条记录的顺序, 则按照第二个排序规则进行排序; 如果按照第二个排序规则无法区分两条记录的顺序, 则按照第三个排序规则进行排序; ……以此类推。ORDER BY 子句完全可以与 WHERE 子句一起使用,唯一需要注意的就是 ORDER BY 子句要放到 WHERE 子句之后,不能颠倒它们的顺序。SELECT * FROM T_Employee WHERE FAge>23 ORDER BY FAge DESC,FSalary DESC 。

1.2高级过滤功能

高级数据过滤技巧几乎同样适用于 Update 语句和 Delete 语句中的Where 子句。

1.2.1通配符过滤

SQL 中的通配符过滤使用 LIKE 关键字,是一个二元操作符, 左表达式为待匹配的字段, 而右表达式为待匹配的通配符表达式。

1.2.1.1单字符匹配

“b_d” 匹配第一个字符为 b、第二个字符为任意字符、第三个字符为 d 的字符串。通配符表达式“_oo_”匹配第一个字符为任意字符、第二个字符为 o、第三个字符为 o、第四个字符为任意字符的字符串。

SELECT * FROM T_Employee WHERE FName LIKE '_erry' 。

SELECT * FROM T_Employee WHERE FName LIKE '__n_' 。

1.2.1.2多字符匹配

进行多字符匹配的通配符为半角百分号“%” ,它匹配任意次数(零或多个)出现的任意字符。比如通配符表达式“k%”匹配以“k”开头、任意长度的字符串。SELECT * FROM T_Employee WHERE FName LIKE 'T%' 。

SELECT * FROM T_Employee WHERE FName LIKE '%n%'。

字符匹配和多字符匹配还可以一起使用。SELECT * FROM T_Employee WHERE FName LIKE '%n_' 。

1.2.2空值检测

没有添加非空约束列是可以为空值的(也就是 NULL)。待检测字段名IS NULL”,比如要查询所有姓名未知的员工信息,则运行下面的SQL语句:SELECT * FROM T_Employee WHERE FNAME IS NULL 。

如果要检测“字段不为空”,则要使用IS NOT NULL,使用方法为“待检测字段名IS NOT NULL”,比如要查询所有姓名已知的员工信息,则运行下面的SQL语句:SELECT * FROM T_Employee WHERE FNAME IS NOT NULL 。

SELECT * FROM T_Employee WHERE FNAME IS NOT NULL AND FSalary

1.2.3反义运算符

同时SQL提供了通用的表示 “不等于” 的运算符 “” , 这样 “不等于”、“不大于”和“不小于”就分别可以表示成“”、“=”。检索所有年龄不等于22岁并且工资不小于2000元”,我们可以编写下面的SQL语
句:SELECT * FROM T_Employee WHERE FAge22 AND FSALARY>=2000 。

因此要完成下面的功能“检索所有年龄不等于22岁并且工资不小于2000元”,我们可以编写下面的SQL语句:
SELECT * FROM T_Employee WHERE NOT(FAge=22) AND NOT(FSALARY

1.2.4多值检测

可以使用OR语句来连接多个等于判断。SQL语句如下:SELECT FAge,FNumber,FName FROM T_EmployeeWHERE FAge=23 OR FAge=25 OR FAge=28 。

SELECT FAge,FNumber,FName FROM T_Employee WHERE FAge IN(23,25,28) 。

1.2.5范围检测

检索所有年龄介于23岁到27岁之间的员工信息” ,可以使用下面的SQL语
句:SELECT * FROM T_Employee WHERE FAGE>=23 AND FAGE 测的语句“BETTWEEN AND”,它可以用来检测一个值是否处于某个范围中(包括范围的边界值,也就是闭区间)。使用方法如下“字段名 BETTWEEN 左范围值 AND 右范围值”。SELECT * FROM T_Employee
WHERE FAGE BETWEEN 23 AND 27 。

检索所有工资介于2000元到3000元之间以及5000元到8000元的员工信息” ,可以使用下面的SQL语句:
SELECT * FROM T_Employee WHERE (FSalary BETWEEN 2000 AND 3000)OR (FSalary BETWEEN 5000 AND 8000) 。

数据库系统对“BETTWEEN AND”进行了查询优化,使用它进行范围值检测将会得到比其他方式更好的性能,因此在进行范围值检测的时候应该优先使用“BETTWEEN AND”。需要注意的就是“BETTWEEN AND”在进行检测的时候是包括了范围的边界值的(也就是闭区间),如果需要进行开区间或者半开半闭区间的范围值检测的话就必须使用其他的解决方案了。

1.2.6低效的where 1=1

因为使用添加了 “1=1”的过滤条件以后数据库系统就无法使用索引等查询优化策略,数据库系统将会被迫对每行数据进行扫描 (也就是全表扫描) 以比较此行是否满足过滤条件, 当表中数据量比较大的时候查询速度会非常慢。 因此如果数据检索对性能有比较高的要求就不要使用这种 “简便” 的方式。

1.3数据分组

SQL语句中使用GROUP BY子句进行分组,使用方式为“GROUP BY 分组字段”。分组语句必须和聚合函数一
起使用,GROUP BY子句负责将数据分成逻辑组,而聚合函数则对每一个组进行统计计算。

SELECT FAge FROM T_Employee GROUP BY FAge。 GROUP BY子句将检索结果划分为多个组,每个组是所有记录的一个子集。GROUP BY子句必须放到SELECT语句的之后,如果SELECT语句有WHERE子句,则GROUPBY子句必须放到WHERE语句的之后。

SELECT FAge FROM T_Employee WHERE FSubCompany = 'Beijing'GROUP BY FAge 需要分组的所有列都必须位于GROUP BY子句的列名列表中,也就是没有出现在GROUP BY子句中的列(聚合函数除外)是不能放到SELECT语句后的列名列表中的。

SELECT FAge,AVG(FSalary) FROM T_Employee GROUP BY FAge 。GROUP BY子句中可以指定多个列,只需要将多个列的列名用逗号隔开即可。指定多个分组规则以后, 数据库系统将按照定义的分组顺序来对数据进行逐层分组, 首先按照第一个分组列进行分组,然后在每个小组内按照第二个分组列进行再次分组……逐层分组,从而实现“组中组”的效果, 而查询的结果集是以最末一级分组来进行输出的。

SELECT FSubCompany,FDepartment FROM T_Employee GROUP BY FSubCompany,FDepartment 。

SELECT FAge,COUNT(*) AS CountOfThisAge FROM T_Employee GROUP BY FAge 。

SELECT FSubCompany,FAge,COUNT(*) AS CountOfThisSubCompAge FROM T_Employee GROUP BY FSubCompany,FAge 。

SELECT FSubCompany,FAge,COUNT(*) AS CountOfThisSubCompAge FROM T_Employee GROUP BY FSubCompany,FAge ORDER BY FSubCompany 。

“COUNT(*)”对每一个分组统计总数,这样就可以统计出每个公司每个年龄段的员工的人数了。SUM、AVG、MIN、MAX也可以在分组中使用。比如下面的SQL可以统计每个公司中的工资
的总值:SELECT FSubCompany,SUM(FSalary) AS FSalarySUM FROM T_Employee GROUP BY FSubCompany 。

1.3.1having子句

有的时候需要对部分分组进行过滤,可以在数据库系统中执行下面的SQL的时候, 数据库系统会提示语法错误, 这是因为聚合函数不能在WHERE语句中使用,必须使用HAVING子句来代替,比如:SELECT FAge,COUNT(*) AS CountOfThisAge FROM T_Employee GROUP BY FAge HAVING COUNT(*)>1 。

HAVING语句中也可以像WHERE语句一样使用复杂的过滤条件,比如下面的SQL用来检索人数为1个或者3个的年龄段,可以使用下面的SQL:SELECT FAge,COUNT(*) AS CountOfThisAge FROM T_Employee
GROUP BY FAge HAVING COUNT(*)=1 OR COUNT(*)=3 。

MYSQL中提供了LIMIT关键字用来限制返回的结果集, LIMIT放在SELECT语句的最后位置,语法为 “LIMIT 首行行号,要返回的结果集的最大数目” 。比如下面的SQL语句将返回按照工资降序排列的从第二行开始(行号从0开始)的最多五条记录:SELECT * FROM T_Employee ORDER BY FSalary DESC LIMIT 2,5 。

DISTINCT关键字是用来进行重复数据抑制的最简单的功能,而且所有的数据库系统都支持DISTINCT,DISTINCT的使用也非常简单,只要在SELECT之后增加DISTINCT即可。 DISTINCT是对整个结果集进行数据重复抑制的, 而不是针对每一个列, 执行下面的SQL语句:SELECT DISTINCT FDepartment,FSubCompany FROM T_Employee 。DISTINCT是对整个结果集进行数据重复抑制的。

联合结果集
有的时候我们需要组合两个完全不同的查询结果集, 而这两个查询结果之间没有必然的联系,只是我们需要将他们显示在一个结果集中而已。在SQL中可以使用UNION运算符来将两个或者多个查询结果集联合为一个结果集中。

只要用UNION操作符连接这两个查询语句就可以将两个查询结果集联合为一个结果集,
SQL语句如下:
SELECT FNumber ,FName,FAge FROM T_Employee
UNION
SELECT FIdCardNumber ,FName,FAge FROM T_T empEmpl oyee 。

联合结果集的原则
联合结果集不必受被联合的多个结果集之间的关系限制,不过使用UNION仍然有两个基本的原则需要遵守:一是每个结果集必须有相同的列数; 二是每个结果集的列必须类型相容。

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. 크로스 플레이가 있습니까?
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Go 언어는 데이터베이스의 추가, 삭제, 수정 및 쿼리 작업을 어떻게 구현합니까? Go 언어는 데이터베이스의 추가, 삭제, 수정 및 쿼리 작업을 어떻게 구현합니까? Mar 27, 2024 pm 09:39 PM

Go 언어는 효율적이고 간결하며 배우기 쉬운 프로그래밍 언어입니다. 동시 프로그래밍과 네트워크 프로그래밍의 장점 때문에 개발자들이 선호합니다. 실제 개발에서 데이터베이스 작업은 필수적인 부분입니다. 이 기사에서는 Go 언어를 사용하여 데이터베이스 추가, 삭제, 수정 및 쿼리 작업을 구현하는 방법을 소개합니다. Go 언어에서는 일반적으로 사용되는 SQL 패키지, Gorm 등과 같은 타사 라이브러리를 사용하여 데이터베이스를 운영합니다. 여기서는 sql 패키지를 예로 들어 데이터베이스의 추가, 삭제, 수정 및 쿼리 작업을 구현하는 방법을 소개합니다. MySQL 데이터베이스를 사용하고 있다고 가정합니다.

Hibernate는 어떻게 다형성 매핑을 구현합니까? Hibernate는 어떻게 다형성 매핑을 구현합니까? Apr 17, 2024 pm 12:09 PM

Hibernate 다형성 매핑은 상속된 클래스를 데이터베이스에 매핑할 수 있으며 다음 매핑 유형을 제공합니다. Join-subclass: 상위 클래스의 모든 열을 포함하여 하위 클래스에 대한 별도의 테이블을 생성합니다. 클래스별 테이블: 하위 클래스별 열만 포함하는 하위 클래스에 대한 별도의 테이블을 만듭니다. Union-subclass: Joined-subclass와 유사하지만 상위 클래스 테이블이 모든 하위 클래스 열을 통합합니다.

iOS 18에는 손실되거나 손상된 사진을 검색할 수 있는 새로운 '복구된' 앨범 기능이 추가되었습니다. iOS 18에는 손실되거나 손상된 사진을 검색할 수 있는 새로운 '복구된' 앨범 기능이 추가되었습니다. Jul 18, 2024 am 05:48 AM

Apple의 최신 iOS18, iPadOS18 및 macOS Sequoia 시스템 릴리스에는 사진 애플리케이션에 중요한 기능이 추가되었습니다. 이 기능은 사용자가 다양한 이유로 손실되거나 손상된 사진과 비디오를 쉽게 복구할 수 있도록 설계되었습니다. 새로운 기능에는 사진 앱의 도구 섹션에 '복구됨'이라는 앨범이 도입되었습니다. 이 앨범은 사용자가 기기에 사진 라이브러리에 포함되지 않은 사진이나 비디오를 가지고 있을 때 자동으로 나타납니다. "복구된" 앨범의 출현은 데이터베이스 손상으로 인해 손실된 사진과 비디오, 사진 라이브러리에 올바르게 저장되지 않은 카메라 응용 프로그램 또는 사진 라이브러리를 관리하는 타사 응용 프로그램에 대한 솔루션을 제공합니다. 사용자는 몇 가지 간단한 단계만 거치면 됩니다.

PHP에서 MySQLi를 사용하여 데이터베이스 연결을 설정하는 방법에 대한 자세한 튜토리얼 PHP에서 MySQLi를 사용하여 데이터베이스 연결을 설정하는 방법에 대한 자세한 튜토리얼 Jun 04, 2024 pm 01:42 PM

MySQLi를 사용하여 PHP에서 데이터베이스 연결을 설정하는 방법: MySQLi 확장 포함(require_once) 연결 함수 생성(functionconnect_to_db) 연결 함수 호출($conn=connect_to_db()) 쿼리 실행($result=$conn->query()) 닫기 연결( $conn->close())

PHP에서 데이터베이스 연결 오류를 처리하는 방법 PHP에서 데이터베이스 연결 오류를 처리하는 방법 Jun 05, 2024 pm 02:16 PM

PHP에서 데이터베이스 연결 오류를 처리하려면 다음 단계를 사용할 수 있습니다. mysqli_connect_errno()를 사용하여 오류 코드를 얻습니다. 오류 메시지를 얻으려면 mysqli_connect_error()를 사용하십시오. 이러한 오류 메시지를 캡처하고 기록하면 데이터베이스 연결 문제를 쉽게 식별하고 해결할 수 있어 애플리케이션이 원활하게 실행될 수 있습니다.

HTML이 데이터베이스를 읽는 방법에 대한 심층 분석 HTML이 데이터베이스를 읽는 방법에 대한 심층 분석 Apr 09, 2024 pm 12:36 PM

HTML은 데이터베이스를 직접 읽을 수 없지만 JavaScript 및 AJAX를 통해 읽을 수 있습니다. 단계에는 데이터베이스 연결 설정, 쿼리 보내기, 응답 처리 및 페이지 업데이트가 포함됩니다. 이 기사에서는 JavaScript, AJAX 및 PHP를 사용하여 MySQL 데이터베이스에서 데이터를 읽는 실제 예제를 제공하고 쿼리 결과를 HTML 페이지에 동적으로 표시하는 방법을 보여줍니다. 이 예제에서는 XMLHttpRequest를 사용하여 데이터베이스 연결을 설정하고 쿼리를 보내고 응답을 처리함으로써 페이지 요소에 데이터를 채우고 데이터베이스를 읽는 HTML 기능을 실현합니다.

PHP를 사용하여 데이터베이스에서 중국어 왜곡 문자를 처리하기 위한 팁과 사례 PHP를 사용하여 데이터베이스에서 중국어 왜곡 문자를 처리하기 위한 팁과 사례 Mar 27, 2024 pm 05:21 PM

PHP는 웹사이트 개발에 널리 사용되는 백엔드 프로그래밍 언어로, 강력한 데이터베이스 운영 기능을 갖추고 있으며 MySQL과 같은 데이터베이스와 상호 작용하는 데 자주 사용됩니다. 그러나 한자 인코딩의 복잡성으로 인해 데이터베이스에서 잘못된 한자를 처리할 때 문제가 자주 발생합니다. 이 기사에서는 잘못된 문자의 일반적인 원인, 솔루션 및 특정 코드 예제를 포함하여 데이터베이스에서 중국어 잘못된 문자를 처리하기 위한 PHP의 기술과 사례를 소개합니다. 문자가 왜곡되는 일반적인 이유는 잘못된 데이터베이스 문자 집합 설정 때문입니다. 데이터베이스를 생성할 때 utf8 또는 u와 같은 올바른 문자 집합을 선택해야 합니다.

Golang을 사용하여 원격 데이터베이스에 연결하는 방법은 무엇입니까? Golang을 사용하여 원격 데이터베이스에 연결하는 방법은 무엇입니까? Jun 01, 2024 pm 08:31 PM

Go 표준 라이브러리 데이터베이스/sql 패키지를 통해 MySQL, PostgreSQL 또는 SQLite와 같은 원격 데이터베이스에 연결할 수 있습니다. 데이터베이스 연결 정보가 포함된 연결 문자열을 생성합니다. sql.Open() 함수를 사용하여 데이터베이스 연결을 엽니다. SQL 쿼리 및 삽입 작업과 같은 데이터베이스 작업을 수행합니다. 리소스를 해제하기 위해 defer를 사용하여 데이터베이스 연결을 닫습니다.

See all articles