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 Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Python中的字串切割和拼接方法的效能比較和最佳實踐是什麼?在Python程式設計中,字串是一個重要的資料類型。在處理字串時,我們經常需要對字串進行切割和拼接操作。然而,不同的切割和拼接方法可能具有不同的性能表現。為了提高程式的效率,我們需要選擇最佳的方法來處理字串。首先,讓我們來比較一下Python中常用的字串切割方法:split()和字串的切

如何使用PHP創建和管理資料庫表隨著互聯網的迅速發展,資料庫成為了各種網站和應用程式不可或缺的組成部分。在PHP中,我們可以利用資料庫管理系統(DBMS)如MySQL來建立和管理資料庫表。本文將教你如何使用PHP來實現這項功能,並附上對應的程式碼範例。連接資料庫首先,我們需要在PHP中連接到資料庫。可以使用PHP提供的mysqli擴充或PDO來實現這項功能。

資料庫檢視和表格的差異有:1、表格是資料庫中用來儲存資料的實體結構,而檢視只是基於資料表或多個資料表的查詢結果集;2、資料表是資料的實體儲存單元,檢視只是提供了查看和操作表資料的規則;3、視圖為資料庫提供進階的安全機制,表沒有安全機制;4、視圖是表的抽象;5、視圖可查詢中組合多個表,表只能查詢單一表; 6.表格是資料庫中的永久性結構,視圖不是;7、視圖可建立相同名稱的視圖,表格不能建立同名表格等等。

C++中常見的字串拼接問題解決方案在C++程式設計中,字串拼接是一種常見的操作,特別是在處理文字和輸出結果時。本文將介紹一些常見的字串拼接問題,並提供相應的解決方案,同時附上程式碼範例以幫助讀者理解。使用"+"運算子進行字串拼接在C++中,可以使用"+"運算子來進行字串拼接,例如:std::stringstr1="Hello";

Go語言是一門開源程式語言,由Google開發,具有高效能和簡潔的特點。在Go語言中,字串拼接是一項常見的操作。本文將分享一些高效率的字串拼接方法,幫助Go語言開發者提高程式碼的效能和效率。一、使用+號進行字串拼接最簡單的方法是使用+號進行字串拼接。例如:packagemainimport"fmt"funcmain()

Go語言中字串拼接的實作方式探究在Go語言中,字串是不可變的,也就是一旦創建後就無法直接修改其內容。因此,在進行字串拼接時,需要特殊的處理方式來確保效率和效能。本文將探討Go語言中字串拼接的實作方式,包括常用的幾種方法以及它們的特性和優劣。同時,我們也會提供具體的程式碼範例來幫助讀者更好地理解。一、使用加號「+」進行字串拼接最簡單的字串拼接方式是使用加

Python中的字串切割和拼接方法有很多種,以下將介紹其中常用的方法,並附上程式碼範例。使用split()方法進行字串切割split()方法可以根據指定的分隔符號將字串切割成多個部分,傳回一個包含切割後部分的清單。 str1="Hello,World!"parts=str1.split(",")#使

Vue中如何實現圖片的分割與拼接功能?摘要:本文將介紹使用Vue實現圖片的分割和拼接功能的方法。透過使用Vue的資料綁定和計算屬性,我們可以輕鬆地實現這項功能。介紹:在許多網站和應用程式中,圖片的分割和拼接功能被廣泛應用。它可以將一張大圖片分割成若干個小圖片,也可以將多張小圖片拼接成一張大圖片。本文將教你如何使用Vue來實現這個功能。技術背景:在Vue中,我
