MySQLシングルテーブルクエリ

5399 ワード

データベースの作成とデータの挿入
#    ,         
CREATE TABLE fruits (
  id INT NOT NULL,
  sid INT NOT NULL,
  NAME CHAR(255) NOT NULL,
  price DECIMAL (8, 2) NOT NULL,
  PRIMARY KEY (id)
);

#       
INSERT INTO fruits
VALUES
  ('1', 101, 'apple', 5.2),
  ('2', 101, 'blackberry', 10.2),
  ('3', 102, 'orange', 11.2),
  ('4', 105, 'melon', 8.2),
  ('5', 102, 'banana', 10.3),
  ('6', 102, 'grape', 5.3),
  ('7', 103, 'coconut', 9.2),
  ('8', 101, 'cherry', 3.2),
  ('9', 103, 'apricot', 2.2),
  ('10', 104, 'lemon', 6.4),
  ('11', 104, 'berry', 7.6),
  ('12', 106, 'mango', 15.6);


単一テーブルクエリ
すべてのフィールドを問合せ
SELECT * FROM fruits;

id	sid	name	price
1	101	apple	5.20
2	101	blackberry	10.20
3	102	orange	11.20
4	105	melon	8.20
5	102	banana	10.30
6	102	grape	5.30
7	103	coconut	9.20
8	101	cherry	3.20
9	103	apricot	2.20
10	104	lemon	6.40
11	104	berry	7.60
12	106	mango	15.60

クエリー指定フィールド
SELECT ID,NAME FROM fruits;

ID	NAME
1	apple
2	blackberry
3	orange
4	melon
5	banana
6	grape
7	coconut
8	cherry
9	apricot
10	lemon
11	berry
12	mango

クエリー指定条件のフィールド
SELECT * FROM fruits WHERE NAME = 'BANANA';

id	sid	name	price
5	102	banana	10.30

INキー付きクエリー
INキーワード:IN(xx,yy,...)条件を満たす範囲内の値が一致するもの、カッコ内の値、または関係
SELECT * FROM fruits WHERE NAME IN ('BANANA','ORANGE');

id	sid	name	price
3	102	orange	11.20
5	102	banana	10.30
SELECT * FROM fruits WHERE ID NOT IN (3,8);

id	sid	name	price
1	101	apple	5.20
2	101	blackberry	10.20
4	105	melon	8.20
5	102	banana	10.30
6	102	grape	5.30
7	103	coconut	9.20
9	103	apricot	2.20
10	104	lemon	6.40
11	104	berry	7.60
12	106	mango	15.60

BETWEEN AND付き範囲クエリー
BETWEEN...AND...:範囲内の値が一致します.
SELECT * FROM fruits WHERE ID BETWEEN 3 AND 9;

id	sid	name	price
3	102	orange	11.20
4	105	melon	8.20
5	102	banana	10.30
6	102	grape	5.30
7	103	coconut	9.20
8	101	cherry	3.20
9	103	apricot	2.20
SELECT * FROM fruits WHERE ID NOT BETWEEN 5 AND 11;

id	sid	name	price
1	101	apple	5.20
2	101	blackberry	10.20
3	102	orange	11.20
4	105	melon	8.20
12	106	mango	15.60

LIKE付き文字照合クエリー
LIKE:ファジイクエリ、LIKEと一緒に使うワイルドカードは「%」、「」
ワイルドカード
機能
“%”
任意の長さに一致する文字を使用します.
“_”
1文字のみ一致
SELECT * FROM fruits WHERE NAME LIKE 'black%';

id	sid	name	price
2	101	blackberry	10.20
SELECT * FROM fruits WHERE NAME LIKE 'b%y';

id	sid	name	price
2	101	blackberry	10.20
11	104	berry	7.60
SELECT * FROM fruits WHERE NAME LIKE '_ER_Y';

id	sid	name	price
11	104	berry	7.60

ロジックとAND付きマルチ条件クエリー
and:同時に条件を満たす
SELECT
  *
FROM
  fruits
WHERE id IN (2, 4, 6, 8, 10)
  AND sid > 102;
  
id	sid	name	price
4	105	melon	8.20
10	104	lemon	6.40

論理ORの多条件クエリ
OR:一つ満足すればいい、inに似ている
SELECT
  *
FROM
  fruits
WHERE id IN (2, 4, 6, 8, 10)
  OR sid > 102;
  
id	sid	name	price
2	101	blackberry	10.20
4	105	melon	8.20
6	102	grape	5.30
7	103	coconut	9.20
8	101	cherry	3.20
9	103	apricot	2.20
10	104	lemon	6.40
11	104	berry	7.60
12	106	mango	15.60

キーワードDISTINCT検索重複しないデータ
SELECT
  DISTINCT SID
FROM
  fruits
WHERE id IN (2, 4, 6, 8, 10)
  OR sid > 102;
  
SID
101
105
102
103
104
106

ORDER BYクエリーの結果のソート
ORDER BYフィールドDESC逆順配列
SELECT DISTINCT
  SID
FROM
  fruits
WHERE id IN (2, 4, 6, 8, 10)
  OR sid > 102
ORDER BY sid DESC;

SID
106
105
104
103
102
101

ORDER BYフィールドASCは正の順序で並べられ、デフォルトでは正
SELECT DISTINCT
  SID
FROM
  fruits
WHERE id IN (2, 4, 6, 8, 10)
  OR sid > 102
ORDER BY sid ASC;

SID
101
102
103
104
105
106

GROUP BYクエリー結果のグループ化
グループ化しない
SELECT SID FROM fruits;

SID
101
101
102
105
102
102
103
101
103
104
104
106

同じ内容を同じグループに分ける
グループ化後、繰り返しはグループ化されます
SELECT SID FROM fruits GROUP BY SID ;

SID
101
102
105
103
104
106

GROUP_CONCATはグループ化された数と内容を表示します
グループ内の各フィールドの内容を表示するGROUP_CONCAT( )
SELECT SID,COUNT(NAME),GROUP_CONCAT(NAME) FROM fruits GROUP BY sid;

SID	count(name)	group_concat(name)
101	3	apple,blackberry,cherry
102	3	orange,banana,grape
103	2	coconut,apricot
104	2	lemon,berry
105	1	melon
106	1	mango

HAVING条件フィルタリングは、WHEREに相当し、グループ化のみ可能
SELECT SID,COUNT(NAME),GROUP_CONCAT(NAME) FROM fruits GROUP BY sid HAVING SID > 103;

SID	count(name)	group_concat(name)
104	2	lemon,berry
105	1	melon
106	1	mango

LIMITはクエリ結果の数を制限する
LIMIT位置ずれ量、行数デフォルト位置ずれ量0、すなわち1行目
LIMITでは、データベーステーブルの任意の行数を選択できます.つまり、1番目のレコードから遍歴することなく、5番目から10番目のレコードを直接取得したり、12番目から15番目のレコードを直接取得したりすることができます.
SELECT * FROM fruits WHERE ID LIMIT 0,5;

id	sid	name	price
1	101	apple	5.20
2	101	blackberry	10.20
3	102	orange	11.20
4	105	melon	8.20
5	102	banana	10.30

SELECT * FROM fruits WHERE ID LIMIT 5,9;

id	sid	name	price
6	102	grape	5.30
7	103	coconut	9.20
8	101	cherry	3.20
9	103	apricot	2.20
10	104	lemon	6.40
11	104	berry	7.60
12	106	mango	15.60