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 搭載アプリ

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ヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

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 を使用してデータベース テーブルを作成および管理する方法 インターネットの急速な発展に伴い、データベースはさまざまな Web サイトやアプリケーションに不可欠な部分になりました。 PHP では、MySQL などのデータベース管理システム (DBMS) を使用してデータベース テーブルを作成および管理できます。この記事では、PHP を使用してこの関数を実装する方法と、対応するコード例を説明します。データベースに接続する まず、PHP でデータベースに接続する必要があります。この機能を実現するには、mysqli 拡張機能または PHP によって提供される PDO を使用できます。

データベースのビューとテーブルを区別する方法 データベースのビューとテーブルを区別する方法 Aug 22, 2023 am 11:27 AM

データベース ビューとテーブルは、データベースにおける 2 つの異なる概念であり、特性と用途が異なります。テーブルは実際にデータベースにデータを格納するエンティティであり、ビューは 1 つ以上のテーブルから派生した仮想テーブルであり、データの保存方法を指定するために使用されます。データを提示して操作します。テーブルはデータの永続性が高く、ビューはより柔軟で便利なデータ アクセスを提供します。

Go言語における文字列連結の実装に関する研究 Go言語における文字列連結の実装に関する研究 Mar 12, 2024 pm 09:24 PM

Go 言語での文字列連結の実装の探索 Go 言語では、文字列は不変です。つまり、一度作成された文字列の内容は直接変更できません。したがって、文字列の連結を実行する場合、効率とパフォーマンスを確保するには特別な処理方法が必要です。この記事では、一般的に使用されるいくつかのメソッドとその特徴、利点と欠点を含めて、Go 言語での文字列連結の実装について説明します。同時に、読者の理解を深めるために具体的なコード例も提供します。 1. 文字列の結合にプラス記号「+」を使用する 文字列を結合する最も簡単な方法は、プラス記号「+」を使用することです。

データベースビューとテーブルの違いは何ですか? データベースビューとテーブルの違いは何ですか? Sep 04, 2023 pm 03:13 PM

データベース ビューとテーブルの違いは次のとおりです: 1. テーブルはデータベースにデータを格納するために使用される物理構造ですが、ビューは 1 つまたは複数のテーブルに基づく単なるクエリ結果セットです; 2. テーブルは物理的なストレージですビューはデータの単位であり、ビューはテーブル データの表示と操作のためのルールのみを提供します; 3. ビューはデータベースに高度なセキュリティ メカニズムを提供しますが、テーブルにはセキュリティ メカニズムはありません; 4. ビューはテーブルの抽象化です; 5. ビューは複数を組み合わせることができますクエリ内のテーブル、およびテーブルは単一のテーブルのみをクエリできる; 6. テーブルはデータベース内の永続的な構造ですが、ビューはそうではありません; 7. ビューは同じ名前のビューを作成できますが、テーブルは同じ名前のテーブルを作成できません。

C++ における一般的な文字列連結の問題の解決策 C++ における一般的な文字列連結の問題の解決策 Oct 09, 2023 am 09:01 AM

C++ における一般的な文字列連結の問題の解決策 C++ プログラミングでは、特にテキストを処理して結果を出力する場合、文字列の連結は一般的な操作です。この記事では、一般的な文字列連結の問題をいくつか紹介し、対応する解決策を提供し、読者の理解を助けるコード例を添付します。文字列の連結には「+」演算子を使用します。C++ では、次のように文字列の連結に「+」演算子を使用できます。

Python での文字列の切断と結合の方法は何ですか? Python での文字列の切断と結合の方法は何ですか? Oct 25, 2023 am 09:34 AM

Python での文字列の切断と結合にはさまざまな方法がありますが、ここではよく使われる方法をコード例とともに紹介します。文字列の切り取りには、split() メソッドを使用します。split() メソッドは、指定された区切り文字に従って文字列を複数の部分に分割し、切り取られた部分を含むリストを返すことができます。 str1="Hello,World!"parts=str1.split(",")#use

データ エクスポート: カスタマイズされたデータベース テーブル データ エクスポート: カスタマイズされたデータベース テーブル Sep 02, 2023 pm 06:01 PM

このシリーズの最初の記事で述べたように、カスタム データベース テーブルの主な問題の 1 つは、既存のインポートおよびエクスポート ハンドラーでは処理されないことです。この記事はこの問題に対処することを目的としていますが、現時点では完全に満足のいく解決策がないことに注意してください。 2 つのシナリオを考えてみましょう: カスタム テーブルはネイティブ WordPress テーブルを参照します。 カスタム テーブルはネイティブ テーブルから完全に独立しています。 「最悪のケース」が最初のケースです。例として、ユーザーアクティビティログを保存するカスタムテーブルを考えてみましょう。ユーザー ID、オブジェクト ID、オブジェクト タイプを参照します。これらはすべて、ネイティブ WordPress テーブルに保存されているデータを参照します。ここで、誰かが WordPress Web サイトからすべてのデータを 2 番目の Web サイトにインポートしたいと考えていると想像してください。たとえば、完全に

See all articles