首頁 資料庫 mysql教程 MySQL必知必会之10-14_MySQL

MySQL必知必会之10-14_MySQL

Jun 01, 2016 pm 01:18 PM
拼接 資料庫表

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
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

Python中的字串切割和拼接方法的效能比較和最佳實踐是什麼? Python中的字串切割和拼接方法的效能比較和最佳實踐是什麼? Oct 18, 2023 am 08:58 AM

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

如何使用PHP建立和管理資料庫表 如何使用PHP建立和管理資料庫表 Sep 09, 2023 pm 04:48 PM

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

資料庫視圖和表格有哪些區別 資料庫視圖和表格有哪些區別 Sep 04, 2023 pm 03:13 PM

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

C++中常見的字串拼接問題解決方案 C++中常見的字串拼接問題解決方案 Oct 09, 2023 am 09:01 AM

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

Go語言中高效率的字串拼接方法分享 Go語言中高效率的字串拼接方法分享 Mar 12, 2024 pm 03:42 PM

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

Go語言中字符串拼接的實作方式探究 Go語言中字符串拼接的實作方式探究 Mar 12, 2024 pm 09:24 PM

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

Python中的字串切割和拼接方法有哪些? Python中的字串切割和拼接方法有哪些? Oct 25, 2023 am 09:34 AM

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

Vue中如何實現圖片的分割與拼接功能? Vue中如何實現圖片的分割與拼接功能? Aug 18, 2023 am 10:51 AM

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

See all articles