MySQLで一般的に使用されるステートメントと関数

mysqlデータベース、一般的に使用されるクエリステートメントの完全なセット

次のレコードは、一般的に使用されるSQL DQLステートメントです。基本クエリ、条件クエリ、ファジークエリ、並べ替えクエリ、集計関数、重複排除、ページングクエリ、制限付き出力、マルチテーブルクエリ...

基本语法:
增:
添加数据:inset into 表名 (列名1,列名2...values(1,值2...)
添加列:alter table 表名 add 列名 数据类型(长度);
删:delete from 表名
删除列:alter table 表名 drop 列名
 可根据需要加上条件,否则删除全表
改:update 表名 set 字段1=值,字段2=...
可根据需要加上条件,否则更新全表
更新列名:alter table 表名 change 旧列名 新列名 数据类型(长度)
查:select 查询列名(多个列名用,隔开)from 表名

1.基本的なクエリ

構文:テーブル名からクエリ列名(複数の列名に使用、分離)を選択
* PS:*すべての列名の代わりにすべての列*をクエリすることができます。クエリの必要性をすべてリストするプロジェクトを作成する場合、時間の複雑さが高くなります。列の
例:
-指定された列の
クエリ-学生ID、名前、年齢のクエリ
指定された列をクエリする

2条件クエリ

理解
条件付きクエリは
クエリ中の基本クエリの後にwhereステートメントを使用し、 whereの後に演算子を使用して適格なデータを保持することです。
条件記号
=等しい
!= <>は異なります
<より小さい>より大きい<=以下> =以上
および/および
-----------両側の条件が同時に満たされている
またはまたは
-------------両側の条件の1つが満たされている
in(set)範囲はsetコレクションの範囲内です
値1と値2の間
------------値1と値2の間 (臨界値を含む、小さいものから大きいものまで)
逆の
例ではありません
-20〜40歳の学生の学生レコードをクエリします -レコードは
ここに写真の説明を挿入
学生番号が1、2ではないことを確認します
ここに写真の説明を挿入

3つのファジークエリ

ファジークエリはwhereの後に配置し、likeキーワードを使用する必要があります
wildcard:
%、任意の数の任意の文字に
一致できます_、任意の文字に一致できます

 例·:-- 查询姓名以“张”开头的学生记录
select * from stu where sname like '张%';
-- 查询姓名中包含“三”的学生记录
select * from stu where sname like '%三%'

4つのソートクエリ

クエリされた結果を
フィールド[desc | asc] ==> desc降順、昇順で特定の順序で並べ替えます

例:
-- 不写排序类型,默认是升序
select * from stu order by age
-- 查询所有学生记录,按年龄升序排序,如果年龄相同时,按编号降序排序
select * from stu order by age asc,sid desc

5つの集計関数

集計関数:
       count(列名)は、指定された列がnullでない行の数をカウントします
       。max(列名)は、指定された列の最大値を取得します。文字列の場合、
       min(列名)は最小
       合計を取得します。(列名)文字順に列の合計値を指定し、非数値を計算します。結果は0です。
       平均(列名)指定した列の平均値を計算し、非数値を計算します。結果は0です。

構文:
テーブル名から集計関数を選択します[ここで…]

-- 查询最高成绩和最低成绩:
select max(score) '最高分',min(score) '最低分' from stu;
-- 统计stu表中成绩大于60的最高成绩和最低成绩:
select max(score) '最高分',min(score) '最低分' from stu where score > 60;

ps:
集計関数で表示される列名は、group byの後に表示する必要があります。
逆に、groupbyの後に表示されないフィールドがある場合、クエリ結果は異常です。

6つの重複排除

重複排除関数distinct(列)
は、指定された列のデータを重複排除します

構文:
selectdistinct(列名)fromテーブル名[ここで…]

-- 不重复的年龄
select distinct(age) from stu;
-- 查询年龄不重复的共有多少人
select count(distinct age) from stu;

7つのグループクエリ

group byでクエリを実行する必要がある場合は、groupbyステートメントを使用する必要があります。

構文:
select * from stu [where…] group by field [orderby…]

同じフィールド値を持つグループがグループ化されます。
注:
1通常、グループ化後の操作は集計操作です
。2複数のグループに分割します。仮想テーブルの結果は数行のデータになります
。3集計関数は個別の集計操作を実行します。グループごとに。

グループ化後にフィルタリングします。have句を使用する必要があります

hacingとwhereの違い:
whereはグループ化前のフィルタリング、haveはグループ化後のフィルタリングです。whereの
後に集計関数を使用することはできませんが、集計関数を使用して持つことができます。
例:

-- 查询男生多少人,女生多少人
select sex,count(*) '人数' from stu group by sex;
-- 查询每个班级的班级编号和每个班级的成绩和:
select cid,sum(score) from stu group by cid;
-- 查询每个班级的班级编号以及每个班级的人数:
select cid '班级',count(sid) '人数' from stu group by cid;
-- 查询成绩总和大于200的班级编号以及成绩和
select cid,sum(score) from stu group by cid having sum(score) > 200
-- having可以使用前面定义的别名
select cid,sum(score) 'sum' from stu group by cid having sum > 200
-- 查询成绩总和大于200的班级编号以及成绩和并根据成绩总和降序
select cid,sum(score) 'sum' from stu group by cid having sum > 200 order by sum asc;

8つの制限出力

クエリ結果の出力を制限することができます。
出力の数と出力する場所を制限することができます。

構文:
SQLステートメントの最後に制限オフセットを書き込む、row_count
制限開始添え字、行数。
例:limit 0,2; ==>最初の出力からの出力、出力2

例:

   -- 输出前两条
select * from stu limit 0,2;

-- 从第四条开始,输出三条
select * from stu limit 3,3;

9つの機能

プロセス機能

If(expr1、expr2、expr3)
expr1がtrueの場合、expr2を返し、それ以外の場合はexpr3
– isnull()関数を返し、空かどうかを判断します
– isnull(field)nullの場合、nullでない場合は1を返します。0を返します。

例:

-- 查询学生id,姓名,成绩,如果成绩为null,显示缺考
select sid,sname,if(isnull(score)=1,'缺考',score) from stu;

CASE [expr1と] THEN [結果1] ... ELSE [デフォルト] END exprが真の場合、戻り値の結果1、そうでない場合は、デフォルトに戻す
場合
の条件は、その文を実行するとき
の条件は、その文を実行すると
...
else文の実行
終了の
ときに最初の後の条件を実行trueの場合は、その後にステートメントを実行します。whenの後
の条件がfalseの場合は、2番目の後に条件を実行します。
すべてfalseの場合は、elseの後にステートメントを実行します。

例:

-- 查询学生id,姓名,成绩,以及等级
-- (0-59 不及格,60-69中,70-89良,90-100优 )
select sid,sname,score,
	case 
		when score < 60 then '不及格'
    when score < 70 then '中'
		when score < 90 then '良'
		when isnull(score)=1 then '缺考'
		else '优'
	end as '等级'
from stu

10を超えるテーブルクエリ

**ユニオンクエリ-結合された結果セット**

2つのテーブルのクエリ結果は垂直方向に一緒にスプライスされます.union
/ unionによって結合され
た2つのテーブルのフィールドの数、タイプ、および順序はすべて同じであることが保証されています。
スプライシング時にユニオンは重複しなくなり、
すべてをユニオンします2つのテーブルのすべてのデータをスプライスします

例えば:

select sid,sname from stu
union all
select cid,cname from class;

接続クエリ:

テーブル間の関係には、1対1、1対多、多対多の3種類があります
。11の関係:関連フィールドを任意のテーブルに追加できます。1対多の
関係:関連フィールドは
多対多でのみ追加できます。多対多の関係:新しいテーブルを作成する必要があります。サードパーティを使用して関係を表します。

結合クエリは、複数のテーブルとデータの複数の行を乗算することです。また、デカルト積を生成します。

内部接続:

内部結合構文:
select * from Table 1 inner join Table 2 on Association condition
内部結合は、関連付け条件を完全に満たすデータのみを保持します

例:

-- 查询学生名称、学生成绩、班级名称、班级地址
select sname,score,cname,caddress from stu inner join class on stu.cid = class.cid

-- 内连接可以简写
select * from stu inner join class on stu.cid = class.cid 
-- 简写成
select * from stu,class where stu.cid = class.cid

アウタージョイン

外部結合:条件を満たしていないデータを保持します。
左外側-left外側が上の加入加入
左の表の条件を満たしていないデータを保持します。
右外部結合の右外側には上の加入
ないデータを保持します右表の条件を満たしていない
一般的な外部キーワードは省略可能

例:

-- 查询全部学生信息,如果有班级信息,一并查出.
select * from stu s left outer join class c on s.cid = c.cid
-- 查询全部班级信息,如果有学生,将学生信息查出
select * from stu s right outer join class c on s.cid = c.cid

サブクエリ

サブクエリはネストされたクエリです。
通常、サブクエリは次の後に表示されます
from、および
whereをテーブルとして使用した後、条件として使用されます

例:

-- 查询与张三同一个班级的学生。
-- 1查出张三的班级
select cid from stu where sname = '张三'
-- 2查出1班的学生
select * from stu where cid = 1
-- 合并成子查询
select * from stu where cid = (select cid from stu where sname = '张三')
-- 成绩高于3号班级所有人的学生信息
-- 1 找到3班最高分
select max(score) from stu where cid = 3
-- 2 找成绩比96高的学生
select * from stu where score > 96
-- 合并
select * from stu where score > (select max(score) from stu where cid = 3)

自己接続
自己接続はそれ自体を接続することであり、1つのテーブルが2つのテーブルとして使用されます

s1は学生テーブルです。s2
リーダーテーブルです
。s1のリーダーはs2の学生です。s1.sid、s1.sname、s2.sid、s2.snameをstu s1、stu s2から選択します。ここで、s1.groupLeaderId = s2.sidおよびs1.sid = 1008

テーブルの例:
学生テーブルを作成します。

DROP TABLE IF EXISTS `stu`;
CREATE TABLE `stu` (
  `sid` int(11) DEFAULT NULL,
  `sname` varchar(25) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  `sex` char(6) DEFAULT NULL,
  `score` int(11) DEFAULT NULL,
  `cid` int(11) DEFAULT NULL,
  `groupLeaderId` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- 添加数据
INSERT INTO `stu` VALUES ('1001', '张三', '20', '男', '72', '1', '1003');
INSERT INTO `stu` VALUES ('1002', '李四', '15', '女', '78', '1', '1003');
INSERT INTO `stu` VALUES ('1003', '王五', '95', '男', '99', '1', '1010');
INSERT INTO `stu` VALUES ('1004', '赵六张', '65', '女', '60', '1', '1007');
INSERT INTO `stu` VALUES ('1005', '周七', '55', '男', '78', '3', '1007');
INSERT INTO `stu` VALUES ('1006', '茅十八', '75', '女', '96', '3', '1007');
INSERT INTO `stu` VALUES ('1007', '张三丰', '40', '男', '85', '3', '1010');
INSERT INTO `stu` VALUES ('1008', '李四方', '45', '女', '90', '2', '1010');
INSERT INTO `stu` VALUES ('1009', '艾三弗森', '45', '', '35', '4', '1008');
INSERT INTO `stu` VALUES ('1010', '三欧文', '35', '女', '49', '2', '1008');


学生テーブル:
学生テーブル
クラステーブルを作成します。

DROP TABLE IF EXISTS `class`;
CREATE TABLE `class` (
  `cid` int(11) DEFAULT NULL,
  `cname` varchar(255) COLLATE utf8_bin NOT NULL,
  `caddress` varchar(255) COLLATE utf8_bin DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

-- ----------------------------
--  添加数据
-- ----------------------------
INSERT INTO `class` VALUES ('1', 'BigData', '102');
INSERT INTO `class` VALUES ('2', 'HTML', '103');
INSERT INTO `class` VALUES ('3', 'VR', '104');
INSERT INTO `class` VALUES ('4', 'Java', '105');

時間割:
時間割

総括する:

書き込み構文:
選択
照会するselection_listの--column
から
TABLE_NAMEテーブル名を照会する
条件フィルター行条件場合
grouping_clumns群によって基がカラムによって結果
グルーピング後の状態フィルタを有する
sort_columnソート順の
制限は、ROW_COUNTオフセット-結果を制限する

おすすめ

転載: blog.csdn.net/CV_Ming/article/details/112389340