目次
SQL の一般的な構文
- SQL ステートメントは 1 行以上で記述し、セミコロンで終わることができます。
- SQL ステートメントでは、スペース/インデントを使用してステートメントの可読性を高めることができます。
- MySQL データベースの SOL ステートメントでは大文字と小文字が区別されないため、大文字のキーワードを使用することをお勧めします。
- ノート:
- 単一行コメント: -- コメント内容または # コメント内容 (MySQL 固有)
- 複数行のコメント:
/*注释内容*/
SQLの分類
分類 | フルネーム | 説明する |
---|---|---|
DDL | データ定義言語 | データ定義言語。データベース オブジェクト (データベース、テーブル、フィールド) を定義するために使用されます。 |
DML | データ操作言語 | データベーステーブル内のデータを追加、削除、変更するために使用されるデータ操作言語 |
DQL | データクエリ言語 | データ クエリ言語。データベース内のテーブルのレコードをクエリするために使用されます。 |
DCL | データ制御言語 | データ制御言語。データベース ユーザーの作成とデータベース アクセス権の制御に使用されます。 |
DDL - データベース操作
-
お問い合わせ
-
すべてのデータベースをクエリする
SHOW DATABASES;
-
現在のデータベースにクエリを実行する
SELECT DATABASE()
-
-
作成
CREATE DATABASE [IF NOT EXISTS] 数据库名 [DEFAULT CHARSET 字符集] [COLLATE 排序规则];
-
消去
DROP DATABASE [IF EXISTS] 数据库名;
-
使用
USE 数据库名;
DDL テーブル操作クエリ
-
現在のデータベース内のすべてのテーブルをクエリします
SHOW TABLES;
-
クエリテーブルの構造
DESC 表名;
-
指定されたテーブルのテーブル作成ステートメントをクエリします。
SHOW CREATE TABLE 表名;
DDL テーブル操作の作成
CREATE TABLE 表名(
字段1 字段1类型[COMMENT 字段1注释],
字段2 字段2类型[COMMENT 字段2注释],
字段3 字段3类型[COMMENT 字段3注释],
......
字段n 字段n类型[COMMENT 字段n注释],
)[COMMENT 表注释];
注: 最後のフィールドにはカンマは必要ありません。
フィールドタイプ
- int: 整数データ型
- 数値: 数値型
- float: 浮動小数点型
- bit: 論理データ型、つまり、yes/no、0/1
- 日付: 年 月 日
- datetime: 日付と時刻の混合値
- char(10): 固定長文字列、固定長
- Varchar (50): 文字列型。長さは変更可能。主に少量のテキスト データにアクセスするために使用されます。
- Varchar (MAX): 文字列タイプ。主に大量のテキスト、画像、アニメーション、その他のデータにアクセスするために使用されます。
create table userinfo(
id int comment '编号',
name varchar(10) comment '姓名',
gender char(1) comment '性别',
age tinyint unsigned comment '年龄',
idcard char(18) comment '身份证号',
entrydate date comment '入职时间'
) comment '员工表';
DDL テーブル操作の変更
- フィールドを追加
ALTER TABLE 表名 ADD 字段名 类型(长度) [COMMENT注释] [约束];
ALTER TABLE user ADD nickname varchar(20) comment'昵称';
- データ型を変更する
ALTER TABLE 表名 MODIFY 字段名 新数据类型(长度);
- フィールド名とフィールドタイプを変更する
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度) [COMMENT 注释] [约束];
alter table userinfo change nickname username varchar(30) comment"昵称";
- フィールドの削除
ALTER TABLE 表名 DROP 字段名;
alter table userinfo drop username;
- テーブル名を変更する
ALTER TABLE 表名 RENAME TO 新表名;
alter table user rename to usertest;
DDL テーブル操作の削除
- テーブルの削除
DROP TABLE [IF EXISTS] 表名;
- 指定されたテーブルを削除して再作成します
TRUNCATE TABLE 表名;
注: テーブルを削除すると、テーブル内のすべてのデータも削除されます。
DML-概要
DML の完全な英語名は Data Manipulation Lanquage (Data Manipulation Language) で、データベース内のテーブルのデータ レコードを追加、削除、変更するために使用されます。
- データを追加 (挿入)
- データを変更する (更新)
- データの削除 ( 削除 )
DML - データの追加
- 指定したフィールドにデータを追加します
sqlINSERT INTO 表名(字段名1,字段名2,...) VALUES(值1,值2,...);
- すべてのフィールドにデータを追加する
INSERT INTO 表名 VALUES(值1,值2);
- データをバッチで追加する
INSERT INTO 表名(字段名1,字段名2) VALUES(值1,值2),(值1,值2),(值1,值2),(值1,值2);
INSERT INTO 表名 VALUES(值1,值2),(值1,值2),(值1,值2);
知らせ:
-
データを挿入する場合、指定されたフィールドの順序は値の順序と 1 対 1 に対応する必要があります。
-
文字列データと日付データは引用符で囲む必要があります。
-
挿入されるデータのサイズは、フィールドの指定された範囲内である必要があります。
DML - データを変更する
UPDATE 表名 SET 字段名1=值1,字段名1=值1,...[WHERE 条件];
update userinfo set name='张三' where id=1;
注: 変更ステートメントの条件は含めることも含めないこともできます。条件がない場合は、テーブル全体のすべてのデータが変更されます。
DML - データの削除
DELETE FROM 表名 [WHERE 条件]
知らせ:
- DELETE ステートメントの条件は存在する場合と存在しない場合があり、条件がない場合はテーブル全体のすべてのデータが削除されます。
- DELETE ステートメントではフィールドの値を削除できません (UPDATE は使用できます)。
DQL-概要
DQL の完全な英語名は Data Query Language (Data Query Language) で、データベース内のテーブル内のレコードをクエリするために使用されるデータ クエリ言語です。
DQL - 基本的なクエリ
- クエリは複数のフィールドを返します
SELECT 字段1,字段2,字段3 FROM 表名;
SELECT * FROM 表名;
- エイリアスを設定する
SELECT 字段1 [AS 别名1],字段2 [AS 别名2]FROM 表名;
select name as '姓名' address as '地址' from userinfo;
- 重複したレコードを削除する
SELECT DISTINCT 字段列表 FROM 表名;
DQL 条件付きクエリ
- 文法
SELECT 字段列表 FROM 表名 WHERE 条件列表;
- 状態
比較演算子 | 関数 |
---|---|
> | 以上 |
>= | 以上 |
< | 未満 |
<= | 以下 |
= | 同等 |
<> または != | 等しくない |
…と…の間 | 一定の範囲内(最小値と最大値を含む)(ルールは小さいものから大きいものまでしか記述できません) |
の(…) | in の後のリスト内の値をもう 1 つ選択します |
「いいね!」プレースホルダー | あいまい一致 (_ は単一の文字に一致し、% は任意の文字に一致します) |
無効である | 無効である |
論理演算子 | 関数 |
---|---|
および または && | そして (複数の条件が同時に満たされる) |
または または || | または (複数の条件のいずれか 1 つが true) |
そうではない、あるいは! | いいえ、いいえ |
查询没有年龄信息的用户(没有信息就是null)
SELECT * FROM newuser WHERE age IS NULL;
查询有年龄信息的用户
SELECT * FROM newuser WHERE age IS NOT NULL;
查询年龄在15(包含)岁到20(包含)岁之间的员工信息
SELECT * FROM newuser WHERE age >= 15 && age <= 20;
SELECT * FROM newuser WHERE age BETWEEN 15 AND 20;
查询年龄为19且id为7的用户
SELECT * FROM newuser WHERE age = 19 && id = 7;
查询年龄等于18或28或40的用户
SELECT * FROM newuser WHERE age = 18 or age = 28 or age = 40;
SELECT * FROM newuser WHERE age in(18,28,40);
查询姓名为两个字的用户
SELECT * FROM newuser WHERE name like '_ _';
查询姓名最后一个字是文的用户
SELECT * FROM newuser WHERE name like '%文';
DQL - 集計関数
-
導入
- データの列を全体として取得し、縦方向の計算を実行します。
-
一般的な集計関数
関数 関数 カウント 総数 最大 最大値 分 最小値 平均 平均値 和 合計する -
構文 (注: null 値はすべての集計関数の演算に参加するわけではありません)
SELECT 聚合函数(字段列表) FROM 表名;
统计该表中用户数量
SELECT COUNT(*) FROM newuser;
SELECT COUNT(id) FROM newuser;
统计该表中用户平均年龄
SELECT avg(age) FROM newuser;
统计该表中用户最大年龄
SELECT max(age) FROM newuser;
统计石家庄市员工年龄之和
SELECT sum(age) FROM newuser where address = '石家庄市';
DQL グループ クエリ
SELECT 字段列表 FROM 表名 [WHERE 条件] GROUP BY 分组字段名 [HAVING 分组后过滤条件];
- どこにあるかと持っているの違い
- where はグループ化前にフィルタリングし、where 条件が満たされない場合はグループ化に参加せず、have はグループ化後に結果をフィルタリングするという実行タイミングが異なります。
- 判定条件が異なり、集計関数は判定できないが、ある場合は判定できる。
根据性别分组,统计男性员工 和 女性员工的数量
select gender , count(*) from userinfo group by gender;
查询年龄小于45的员工,并根据工作地址分组,获取员工数量大于等于3的工作地址
select workaddress,count(*) from userinfo where age < 45 group by workaddress having count(*) >=3;
知らせ:
-
実行順序: ここで > 集計関数 > を持つ
-
グループ化後、クエリ対象となるフィールドは通常、集計関数とグループ化フィールドであり、他のフィールドをクエリしても意味がありません。
DQL - 並べ替えクエリ
- 文法
SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式,字段2 排序方式2;
SELECT * FROM workinfo_table ORDER BY age DESC;
- 並び替え
- ASC: 昇順 (デフォルト)
- DESC: 降順
注: 複数フィールドの並べ替えの場合、最初のフィールドが同じ値を持つ場合、2 番目のフィールドに従って並べ替えられます。
DQL ページング クエリ
SELECT 字段列表 FROM 表名 LIMT 起始索引,查询记录数;
知らせ:
-
開始インデックスは 0 から始まり、開始インデックス = (クエリ ページ番号 - 1) * 各ページに表示されるレコードの数になります。
-
ページネーション クエリはデータベースの方言であり、データベースが異なれば実装も異なります。MySQL 中国語の LIMIT は異なります。
-
データの最初のページがクエリされている場合、開始インデックスは省略でき、直接制限 10 と省略できます。
DCL-はじめに
DCL の正式な英語名は Data Control Lanquage (Data Control Language) で、データベース ユーザーの管理とデータベース アクセス権の制御に使用されます。
DCL-ユーザー管理
- ユーザーに問い合わせる
USE mysql;
SELECT * FROM user;
- ユーザーを作成
CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';
- ユーザーパスワードを変更する
ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_passworld BY '新密码';
- ユーザーを削除する
DROP USER '用户名'@'主机名';
创建用户 testa 只能够在当前主机local host访问,密码123456
create user 'testa'@'localhost' identified by '123456';
创建用户 testb 可以在任意主机访问该数据库 密码123456
create user 'testb'@'%' identified by '123456';
修改用户 testa 的访问密码为1234
alter user 'testa'@'%' identified with mysql_native_passworld by '1234';
删除用户 testb
drop user 'testb'@'localhost';
DCL アクセス制御
MySQL にはさまざまな種類の権限が定義されていますが、一般的に使用されるものは次のとおりです。
権限 | 説明する |
---|---|
すべて、すべての特権 | すべての権限 |
選択する | クエリデータ |
入れる | データを挿入する |
アップデート | データを変更する |
消去 | データを削除する |
変更 | テーブルを変更する |
落とす | データベース/テーブル/ビューを削除します |
作成 | データベース/テーブルの作成 |
- クエリ権限
SHOW GRANTS FOR '用户名'@'主机名';
- 付与された許可
GRANT 权限列表 ON 数据库.表名 TO '用户名'@'主机名';
grant all on userinfo.* to 'testa'@'%';
- 許可を取り消す
REVOKE 权限列表 ON 数据库.表名 FROM '用户名'@'主机名';
revoke all on userinfo.* from 'testa'@'%';
知らせ:
- 複数の権限はカンマで区切ります
- 承認する場合、データベース名とテーブル名を * でワイルドカード化して、すべてを表すことができます。