[データベース]データベースのクエリ操作

クエリのデータベース
構築データ
操作を容易にするためには、第一次のデータを構築します

  1. 学生表
create table `student` (
   `id` int unsigned primary key auto_increment,
   `name` char(32) not null unique,
   `sex` enum('男', '女') not null,
   `city` char(32) not null,
   `description` text,
   `birthday` date not null default '1995-1-1',
   `money` float(7, 2) default 0,
   `only_child` boolean
) charset=utf8;
insert into `student`
(`name`, `sex`, `city`, `description`, `birthday`,
`only_child`)
values
('郭德纲', '男', '北京', '班长', '1997/10/1', rand() * 100,
True),
('陈乔恩', '女', '上海', NULL, '1995/3/2', rand() * 100,
True),
('赵丽颖', '女', '北京', '班花, 不骄傲', '1995/4/4', rand()
* 100, False),
('王宝强', '男', '重庆', '超爱吃火锅', '1998/10/5', rand() *
100, False),
('赵雅芝', '女', '重庆', '全宇宙三好学生', '1996/7/9',
rand() * 100, True),
('张学友', '男', '上海', '奥林匹克总冠军!', '1993/5/2',
rand() * 100, False),
('陈意涵', '女', '上海', NULL, '1994/8/30', rand() * 100,
True),
('赵本山', '男', '南京', '副班长', '1995/6/1', rand() *
100, True),
('张柏芝', '女', '上海', NULL, '1997/2/28', rand() * 100,
False),
('吴亦凡', '男', '南京', '大碗宽面要不要?', '1995/6/1', 
rand() * 100, True),
('鹿晗', '男', '北京', NULL, '1993/5/28', rand() * 100,
True),
('关晓彤', '女', '北京', NULL, '1995/7/12', rand() * 100,
True),
('周杰伦', '男', '台北', '小伙人才啊', '1998/3/28', rand() *
100, False),
('马云', '男', '南京', '一个字:贼有钱', '1990/4/1', rand()
* 100, False),
('马化腾', '男', '上海', '马云死对头', '1990/11/28', rand()
* 100, False);
  1. 結果テーブル
create table score (
   `id` int unsigned primary key auto_increment,
   `math` float not null default 0,
   `english` float not null default 0
) charset=utf8;
insert into score (`math`, `english`)
values
(49, 71), (62, 66.7), (44, 86), (77.5, 74), (41, 75),
(82, 59.5), (64.5, 85), (62, 98), (44, 36), (67, 56),
(81, 90), (78, 70), (83, 66), (40, 90), (90, 90);

第二に、一般的に使用されるクエリ

  1. SELECT:フィールド式
    SELECTクエリは、両方を行うことができ、あなたは出力を行うことができます
    例:
select rand();  -- 随机数
select unix_timestamp(); -- 显示Unix时间戳
select id, name from student;
  1. 句FROM
    構文:テーブルからの選択フィールドと、
    複数のデータソースを書き込むことができるデータソースに続く、データソースからそれはまた、他のクエリの結果であり得ることを一般的に示してい
SELECT student.name, score.math FROM student, score;
  1. WHERE句:指定された条件による絞り込み
    構文:条件テーブルからの選択フィールド、
    条件がクエリを実行することで、データ真の結果だけを返す
    例を
select name from student where city = '上海';

ヌル値判定:nullです| nullではありません

select `name` from `student` where `description` is
null;
select `name` from `student` where `description` is not
null;

レンジ判断:
BETWEEN ...と...
ない...と... BETWEEN

select id, math from score where math between 60 and 70;
select id, math from score where math not between 60 and
70;
select * from score where math>=80 and english<=60;  --
直接做比较判断
  1. GROUP BY:クエリパケットは
    フィールドでグループ化され、フィールドには、グループ、クエリの結果として同じ値を返します
    簡単な統計の分類が表示されます。
    WHEREでWHEREの後ろに配置することがある場合
    、構文は:グループフィールドによってテーブル群から選択フィールド。
select sex, count(id) from student group by sex;
-- 在group将需要的结果通过 “聚合函数” 拼接
select sex, group_concat(name) from student group by
sex;
-- 添加where语句
-- 按性别分组, 将上海地区的男生女生姓名连接起来
select sex, group_concat(name) from student where
city='上海' group by sex;
  1. HAVING
    HAVINGとWHERE SQLの増加キーワードがWHERE、ので、HAVING句の
    集計関数を使用することはできません
    構文:SELECT 字段 FROM 表名 HAVING 条件;
    :。背後には、唯一のデータソースの後に記述することができ、集計関数を追加することはできません
    HAVING:条件は、フィールドでなければなりませんGROUP BYを備えた結果セットは、で書くことができる
    の背面
    例:
select `name`, `birthday` from `student` where
`birthday` > '1995-1-1';
select `name`, `birthday` from `student` having
`birthday` > '1995-1-1';
select `name` from `student` where `id` >= 5;
select `name` from `student` having `id` >= 5;  -- 错误
select * from student where id>=3 and city='北京';
select * from student having id>=3 and city='北京';
select * from student where id>=3 having city='北京';  --
混用
-- 取出每个城市中满足最小出生年份大于1995的
select city, group_concat(birthday) from student group
by city having min(birthday) > '1995-1-1';
  1. ORDER BYは:ソートフィールドにより、
    主な役割は、ORDER BYソートすることで
    も、後に記述することHAVINGがある場合は、ORDER BYはバックGROUPBYに書かれ
    た表面
    構文:テーブル名の順序から選択フィールドをソートフィールドのASCで| DESC;
    分割昇順降順昇順DESC、デフォルトのASC(書き込むことはできません)
select * from student order by age;
select * from student order by age desc;
  1. LIMIT:抽出の数を制限します
select 字段 from 表名 limit m;  -- 从第 1 行到第 m 行
select 字段 from 表名 limit m, n;  -- 从第 m 行开始,往下取
n 行
select 字段 from 表名 limit m offset n;  -- 跳过前 n 行, 取
后面的 m 行
  1. DISTINCT:重複排除
    の例
select distinct city from student;
  1. デュアルテーブル
    デュアルは、仮想テーブルで、ちょうど選択...から...順番に文の整合性を確保するために、
select now() from dual;

第三に、機能
集約関数
ここに画像を挿入説明ここに画像を挿入説明
の数値クラスの機能
ここに画像を挿入説明

日付の計算クラスの機能

ここに画像を挿入説明

文字列関連機能

ここに画像を挿入説明
その他の機能

ここに画像を挿入説明
第四には、マルチテーブルクエリ
UNIONジョイント問い合わせ
二つ以上のSELECT文を結合するUNION演算子は、セットをもたらします。
組合の要件:

  1. select文の両側にフィールドの数は同じでなければなりません
  2. 両側にはデータフィールドの異なる種類を持っていること
  3. デフォルトのフィールド名テーブルを設定するには、左側に応じて
  4. 使用法:
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;

INNER JOINは:コネクター(交差点)

INNERキーワード戻りラインは、少なくとも1つの整合テーブルに存在するJOIN。
文法

SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;
SELECT 字段
FROM1 INNER JOIN2
ON1.字段=2.字段;
-- 或:
SELECT column_name(s)
FROM table1 JOIN table2
ON table1.column_name=table2.column_name;

LEFT JOINは:LEFT JOINを

LEFTは左の表(TABLE1)からキーワードJOINの右の表(表2)があっても、すべての行を返します。
一致していません。一致するものがNULLの結果は、右側のテーブルに存在しない場合。
文法

SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name=table2.column_name;
-- 或:
SELECT column_name(s)
FROM table1
LEFT OUTER JOIN table2
ON table1.column_name=table2.column_name;

右の接続は:RIGHT JOINを
RIGHT右キーワードテーブル(表2)に参加、左テーブルとしても、すべての行を返します
(TABLE1)が一致していません。一致左側のテーブルが存在しない場合、結果はNULLです。

文法

SELECT column_name(s)
FROM table1
RIGHT JOIN table2
ON table1.column_name=table2.column_name;
-- 或:
SELECT column_name(s)
FROM table1
RIGHT OUTER JOIN table2
ON table1.column_name=table2.column_name;

FULLはJOIN:完全に接続
FULLがJOIN接続だけ左テーブル(TABLE1)及び前記右テーブル(表2)である
テーブルが一致し、戻りラインがあります。LEFTの同等はJOINとRIGHT JOINの
結果を。
特別な注意:MySQLは完全な参加をサポートしていません。
文法

SELECT column_name(s)
FROM table1
FULL OUTER JOIN table2
ON table1.column_name=table2.column_name;

NATURAL JOINは:接続NATURAL
NATURAL参加1.natural接続を
2.naturalは自然左への接続参加し、左
右のナチュラル・ジョイン右外側に参加3.naturalを
機能:

1.決意条件が自動的に同じ名前のフィールドに基づいて、接続することができ
、同じ名前のフィールドが存在しない場合は2、デカルト積を返し
3が自動的に照合結果を返すを

  • フィールドには、接続のみを返します。
  • フロントフィールド上に接続されました
select * from stuinfo a natural join score b;
select * from stuinfo a natural left join score b;

CROSS JOINは:クロス接続

特長:リターンデカルト製品

select * from a cross b;

関数を使用して、

select * from stuinfo a left join score b on a.sid=b.sid; #主要作用,是自动查找关联字段,依据的是同名字段,但是同名字段是自己制定
select * from stuinfo a join score b using(sid);

サブクエリ
クエリステートメントとクエリ

select name from student where id in (select id from score
where math > 10);

第五に、ビューテーブル

特長は、表のビュー

  • ビューの形成から抽出されたデータ、仮想テーブル、リスト、又は他のデータの特定の部分集合である
    一時テーブルを言います。
  • 照会表を作成すると、ビューを依存しています。
  • あなたはそれを手動で削除しない限り表示は消えることはありません。
  • 時にはビューは、効率を向上させることができます。一時表はありません、ヘルプのパフォーマンス、リソース消費量で行います
  • データベースの一般的なビューはtempdbの中に一時テーブルと一緒に保存され、常に内部です。
  • 複数のブラウジングテーブルを接続する際に使用するのに適して見る、追加、削除、変更には適していません、これは実行増やすことができます
    ラインの効率を。
  • テーブル名接頭辞V_の一般的な見解では、通常のテーブルを区別するために使用。
  • 元のテーブルの変更は、データビューに影響を与えます。

ビューを作成します。

構文:create view 视图名 as 查询语句
例:


create view v_user_score as
select a.id, a.name, b.math, b.english
from student a inner join score b on a.id=b order by id;
-- 查询
select * from v_user_score;
-- 删除
drop view v_user_score;
公開された116元の記事 ウォン称賛10 ビュー1362

おすすめ

転載: blog.csdn.net/weixin_44727383/article/details/104955276
おすすめ