MySQL必知必会之10-14_MySQL
bitsCN.com
10.创建计算字段
计算字段并不实际存在于数据库表中。计算字段是运行时在你SELECT语句内创建的。
字段(filed):基本上与列的意思相同,经常互换使用,不过数据库列一般称为列,而术语字段通常用在计算字段的连接上。
10.1拼接字段
拼接:将值联结到一起构成单个值。
Concat()函数:多数DBMS使用+或||实现拼接,而MYSQL使用Concat()函数实现。
Rtrim()函数:去掉值右边的所有空格
mysql> SELECT CONCAT(RTrim(vend_name),' (',RTrim(vend_country),')')FROM vendors
ORDER BY vend_name;
+-------------------------------------------------------+
| CONCAT(RTrim(vend_name),'(',RTrim(vend_country),')') |
+-------------------------------------------------------+
| ACME (USA) |
| Anvils R Us (USA) |
| Furball Inc. (USA) |
| Jet Set (England) |
| Jouets Et Ours (France) |
| LT Supplies (USA) |
+-------------------------------------------------------+
6 rows in set (0.00 sec)
10.2使用别名
别名用AS关键字赋予。
mysql> SELECT CONCAT(RTrim(vend_name),'(',RTrim(vend_country),')') AS vend_titl
e FROM vendors ORDER BY vend_name;
+-------------------------+
| vend_title |
+-------------------------+
| ACME (USA) |
| Anvils R Us (USA) |
| Furball Inc. (USA) |
| Jet Set (England) |
| Jouets Et Ours (France) |
| LT Supplies (USA) |
+-------------------------+
6 rows in set (0.00 sec)
输出结果与以前相同,但是现在列名为vend_title。
10.3执行算术计算
SELECTprod_id,quantity,item_price,quantity*item_price ASexpanded_price FROMorderitems WHERE order_num = 20005;
+---------+----------+------------+------------------+
| prod_id | quantity | item_price |ASexpanded_price |
+---------+----------+------------+------------------+
| ANV01 | 10 | 5.99 | 59.90 |
| ANV02 | 3 | 9.99 | 29.97 |
| TNT2 | 5 | 10.00 | 50.00 |
| FB | 1 | 10.00 | 10.00 |
+---------+----------+------------+------------------+
4 rows in set (0.03 sec)
11.使用数据处理函数
使用函数
大多数SQL实现支持以下类型的函数:
1) 用于处理文本串(如删除或填充值,转换值大小写)的文本函数
2) 用于在数值数据上进行算术操作(如返回绝对值,进行代数运算的数值函数)
3) 用于出来日期和时间并从这些值中提取特定成分(如返回日期之差)的日期和时间函数
4) 返回DBMS正使用的特殊信息(如返回用户登录信息)的系统函数
11.1文本处理函数
Left():返回串左边的字符
Length():返回串的长度
Locate():找出串的一个字串
Lower():将串转换为小写
LTrim():去掉左边的空格
Right():返回串右边的字符
Rtrim():去除列值右边的空格
Soundex():返回串的SOUNDEX值,将任何文本串转换为描述其语音表示的字母数字模式算法
SubString():返回子串的字符
Upper():将文本转换为大写
SELECT vend_name,Upper(vend_name) ASvend_name_upcase FROM vendors;
SELECT cust_name,cust_contact FROM customersWHERE Soundex(cust_contact)= Soundex('Y Lie');//结果如下,输出cust_contact发音和'Y Lie'一致的结果,这里发音一致的是Y Lee。
+-------------+--------------+
| cust_name | cust_contact |
+-------------+--------------+
| Coyote Inc. | Y Lee |
+-------------+--------------+
1 row in set (0.00 sec)
11.2日期和时间处理函数
AddDate() 增加一个日期
AddTime() 增加一个时间
CurDate() 返回当前日期
Data() 返回日期时间的日期部分
DataDiff() 返回两个日期之差
Data_Add() 高度灵活的日期运算函数
Data_Format() 返回一个格式化的日期或时间串
Day() 返回一个日期的天数部分
DayOfWeek () 对于一个日期,返回对应的星期几
Hour() 返回一个时间的小时部分
Minute() 返回一个时间的分钟部分
Mounth() 返回一个日期的月份部分
Now() 返回当前的日期和时间
Second() 返回一个时间秒部分
Time() 返回一个时间的实践部分
Year() 返回一个日期的年份部分
MYSQL日期格式为yyyy-mm-dd
mysql> SELECT cust_id,order_num FROMorders WHERE Date(order_date) = '2005-09-01
';//输出结果如下
+---------+-----------+
| cust_id | order_num |
+---------+-----------+
| 10001 | 20005 |
+---------+-----------+
1 row in set (0.01 sec)
11.3数值处理函数
Abs() 返回一个数的绝对值
Cos() 一个角度的余弦值
Exp() 一个数的指数值
Mod() 除操作数的余数
Pi() 返回圆周率
Rand() 返回一个随机数
Sin() 一个角度的正弦
Sqrt() 一个数的平方根
Tan() 一个角度的正切
12.汇总数据
12.1聚集函数
聚集函数:运行在行组山,计算和返回单个值的函数
AVG() 某列的平均值,忽略值为NULL的行
COUNT() 某列的行数,忽略值为NULL的行
MAX() 某列的最大值
MIN() 某列的最小值
SUM() 某列值之和
还支持一些标准偏差聚集函数,这里不涉及。
SELECT AVG(PROD_PRICE) AS avg_price FROMproducts;
+-----------+
| avg_price |
+-----------+
| 16.133571 |
+-----------+
1 row in set (0.03 sec)
12.聚集不同的值
SELECT AVG(DISTINCT prod_price) AS avg_priceFROM products WHERE vend_id = 1003;
+-----------+
| avg_price |
+-----------+
| 15.998000 |
+-----------+
1 row in set (0.03 sec)
可以看到,在使用了DISTINCT后,此例子中的avg_price比较高,因为有多个物品具有相同的较低价格。
12.3组合聚集函数:
SELECT AVG(prod_price) ASavg_price,MIN(prod_price) AS price_min FROM products WHERE vend_id = 1003;
13.分组数据
分组允许把数据分为多个逻辑组,以便能对每个组进行聚集计算。
13.1创建分组
mysql> SELECT vend_id,COUNT(*) ASnum_prods FROM products GROUP BY vend_id;
+---------+-----------+
| vend_id | num_prods |
+---------+-----------+
| 1001 | 3 |
| 1002 | 2 |
| 1003 | 7 |
| 1005 | 2 |
+---------+-----------+
4 rows in set (0.05 sec)
GROUP BY子句指示MySQL分组数据,然后对每个组而不是整个结果进行聚集。
使用GROUP BY的重要规则:
1) 可以包含任意数目的列,可以嵌套分组
2) 除聚集语句外,SELECT语句中的每个列都必须在GROUPBY子句中给出
3) 如果分组中有NULL值,则将NULL作为一个分组
4) GROUP BY子句必须出现在WHERE子句之后,ORDER BY子句之前
13.2过滤分组
HAVING支持所有WHERE操作符。
mysql> SELECT cust_id,COUNT(*) AS ordersFROM orders GROUP BY cust_id HAVING COU
NT(*) >= 2;
+---------+--------+
| cust_id | orders |
+---------+--------+
| 10001 | 2 |
+---------+--------+
1 row in set (0.00 sec)
这里的最后一行它过滤COUNT(*)>=2(两个以上的订单)的那些分组。
HAVING和WHERE的区别:WHERE在数据分组前进行过滤,HAVING在数据分组后进行过滤。
13.3分组和排序
SELECT order_num,SUM(quantity*item_price) AS ordertotal FROMorderitems GROUP BY order_num HAVING SUM(quantity*item_price)>=50;
+-----------+------------+
| order_num | ordertotal |
+-----------+------------+
| 20005 | 149.87 |
| 20006 | 55.00 |
| 20007 | 1000.00 |
| 20008 | 125.00 |
+-----------+------------+
4 rows in set (0.00 sec)
13.4 SELECT子句的顺序
SELECT->FROM->WHERE->GROUP BY->HAVING->ORDERBY->LIMIT
14 使用子查询
14.1利用子查询进行过滤
SELECT cust_name,cust_contact FROM customers WHERE cust_id IN(SELECT cust_id FROM orders WHERE order_num IN (SELECT order_num FROMorderitems WHERE prod
_id = 'TNT2'));
+----------------+--------------+
| cust_name |cust_contact |
+----------------+--------------+
| Coyote Inc. | Y Lee |
| Yosemite Place | Y Sam |
+----------------+--------------+
2 rows in set (0.11 sec)
虽然子查询一般与IN操作符结合使用,但也可以用于测试等于(=)、不等于()等。
14.2作为计算字段使用子查询
SELECT cust_name,cust_state,(SELECT COUNT(*) FROM orders WHEREorders.cust_id = customers.cust_id) AS orders FROM customers ORDER BYcust_name;
+----------------+------------+--------+
| cust_name | cust_state| orders |
+----------------+------------+--------+
| Coyote Inc. | MI | 2 |
| E Fudd | IL | 1 |
| Mouse House | OH | 0 |
| Wascals | IN | 1 |
| Yosemite Place | AZ | 1 |
+----------------+------------+--------+
5 rows in set (0.00 sec)
这条select语句对customers表中每个客户返回3列:cust_name,cust_state和orders.orders是一个计算字段,它是由圆括号中的子查询建立的。该子查询对检索出的每个客户执行一次。在此例子中,该子查询执行了5次,因为检索除了5个客户。
==参考MySQL必知必会
bitsCN.com
핫 AI 도구

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

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

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

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

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

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

뜨거운 주제









Python의 문자열 절단 및 접합 방법에 대한 성능 비교 및 모범 사례는 무엇입니까? Python 프로그래밍에서 문자열은 중요한 데이터 유형입니다. 끈을 처리할 때 끈을 자르고 연결해야 하는 경우가 종종 있습니다. 그러나 절단 및 접합 방법이 다르면 성능 특성이 다를 수 있습니다. 프로그램의 효율성을 높이려면 문자열을 처리하는 가장 좋은 방법을 선택해야 합니다. 먼저 Python에서 일반적으로 사용되는 문자열 절단 방법인 분할()과 문자열 절단을 비교해 보겠습니다.

PHP를 사용하여 데이터베이스 테이블을 생성하고 관리하는 방법 인터넷의 급속한 발전으로 인해 데이터베이스는 다양한 웹사이트와 애플리케이션에서 없어서는 안 될 부분이 되었습니다. PHP에서는 MySQL과 같은 데이터베이스 관리 시스템(DBMS)을 사용하여 데이터베이스 테이블을 생성하고 관리할 수 있습니다. 이 문서에서는 해당 코드 예제와 함께 PHP를 사용하여 이 기능을 구현하는 방법을 설명합니다. 데이터베이스에 연결 먼저 PHP에서 데이터베이스에 연결해야 합니다. 이 기능을 구현하려면 PHP에서 제공하는 mysqli 확장이나 PDO를 사용할 수 있습니다.

데이터베이스 뷰와 테이블의 차이점은 다음과 같습니다. 1. 테이블은 데이터베이스에 데이터를 저장하는 데 사용되는 물리적 구조인 반면, 뷰는 테이블 또는 여러 테이블을 기반으로 하는 쿼리 결과 집합입니다. 2. 테이블은 물리적 저장소입니다. 3. 뷰는 데이터베이스에 대한 고급 보안 메커니즘을 제공하며 테이블에는 보안 메커니즘이 없습니다. 4. 뷰는 여러 테이블을 결합할 수 있습니다. 6. 테이블은 데이터베이스의 영구 구조이지만 뷰는 그렇지 않습니다. 7. 뷰는 동일한 이름의 뷰를 생성할 수 있지만 테이블은 동일한 이름의 테이블을 생성할 수 없습니다.

데이터베이스 뷰와 테이블은 서로 다른 특성과 용도를 지닌 데이터베이스의 두 가지 개념입니다. 테이블은 실제로 데이터베이스에 데이터를 저장하는 엔터티인 반면, 뷰는 하나 이상의 테이블에서 파생된 가상 테이블로, 방법을 지정하는 데 사용됩니다. 데이터를 제시하고 조작합니다. 테이블은 데이터 지속성이 더 높고, 뷰는 더 유연하고 편리한 데이터 액세스를 제공합니다.

Python에는 문자열 자르기 및 연결 방법이 많이 있습니다. 다음은 코드 예제를 첨부하여 일반적으로 사용되는 방법을 소개합니다. 문자열 자르기에는 Split() 메서드를 사용합니다. Split() 메서드는 지정된 구분 기호에 따라 문자열을 여러 부분으로 분할하고 잘린 부분이 포함된 목록을 반환할 수 있습니다. str1="안녕하세요, 세계!"parts=str1.split(",")#use

Go 언어의 문자열 연결 구현에 대한 탐구 Go 언어에서 문자열은 변경할 수 없습니다. 즉, 일단 생성되면 해당 내용을 직접 수정할 수 없습니다. 따라서 스트링 접합을 수행할 때 효율성과 성능을 보장하기 위해 특별한 처리 방법이 필요합니다. 이 기사에서는 일반적으로 사용되는 몇 가지 방법과 그 특성, 장점 및 단점을 포함하여 Go 언어의 문자열 연결 구현을 살펴봅니다. 동시에 독자의 이해를 돕기 위해 구체적인 코드 예제도 제공할 예정입니다. 1. 문자열 연결에 더하기 기호 "+"를 사용합니다. 문자열을 연결하는 가장 간단한 방법은 더하기 기호 "+"를 사용하는 것입니다.

C++의 일반적인 문자열 연결 문제에 대한 해결 방법 C++ 프로그래밍에서 문자열 연결은 특히 텍스트를 처리하고 결과를 출력할 때 일반적인 작업입니다. 이 기사에서는 몇 가지 일반적인 문자열 연결 문제를 소개하고 해당 솔루션을 제공하며 독자의 이해를 돕기 위해 코드 예제를 첨부합니다. 문자열 연결에 "+" 연산자를 사용합니다. C++에서는 문자열 연결에 "+" 연산자를 사용할 수 있습니다. 예: std::stringstr1="Hello";

데이터베이스 뷰와 데이터베이스의 테이블에는 다섯 가지 차이점이 있습니다. 1. 뷰는 데이터를 저장하지 않지만 테이블은 실제로 데이터를 저장하는 개체입니다. 2. 뷰의 데이터는 가상 테이블이며 테이블의 데이터는 가져올 수 있습니다. 3. 뷰는 쿼리문의 구조를 상속하지만 테이블에는 자체 구조 정의가 있습니다. 4. 뷰는 업데이트할 수 없지만 테이블은 이에 대한 직접 작업을 허용합니다. 기본 테이블에 대한 권한이 있으며 테이블에는 자체 액세스 권한이 있습니다.
