MySQl データベースが知っておく必要がある SQL ステートメント

怪我咯
リリース: 2017-04-30 10:27:55
オリジナル
1130 人が閲覧しました

この記事は、mysql データベースが知っておくべき SQL ステートメントの拡張バージョンに関する記事を共有します。非常に優れており、必要な方は参考にしてください。

この記事は、質問と拡張バージョンです。 SQL文は以下の通りです。

users テーブルを作成し、id、名前、性別、sal フィールドを設定します。id は主キーです

drop table if exists users; 
create table if not exists users( 
  id int(5) primary key auto_increment, 
  name varchar(10) unique not null,   
  gender varchar(1) not null, 
  sal int(5) not null 
); 
insert into users(name,gender,sal) values('AA','男',1000); 
insert into users(name,gender,sal) values('BB','女',1200);
ログイン後にコピー

------ ----- -------------------------------------- ----- -------------

一対一: AA の識別番号は何ですか

drop table if exists users; 
create table if not exists users( 
  id int(5) primary key auto_increment, 
  name varchar(10) unique not null,   
  gender varchar(1) not null, 
  sal int(5) not null 
); 
insert into users(name,gender,sal) values('AA','男',1000); 
insert into users(name,gender,sal) values('BB','女',1200); 
drop table if exists cards; 
create table if not exists cards( 
  id int(5) primary key auto_increment, 
  num int(3) not null unique, 
  loc varchar(10) not null, 
  uid int(5) not null unique, 
  constraint uid_fk foreign key(uid) references users(id) 
); 
insert into cards(num,loc,uid) values(111,'北京',1); 
insert into cards(num,loc,uid) values(222,'上海',2);
ログイン後にコピー

[注: 内部結合は内部結合を意味します]

りー

- -------------------------------------- ------

1 対多: 「開発部門」に所属する従業員をクエリする

グループ テーブルを作成する

select u.name "姓名",c.num "身份证号" 
from users u inner join cards c 
on u.id = c.uid 
where u.name = 'AA'; 
-- 
select u.name "姓名",c.num "身份证号" 
from users u inner join cards c 
on u.id = c.uid 
where name = 'AA';
ログイン後にコピー

emps テーブルを作成する

drop table if exists groups; 
create table if not exists groups( 
  id int(5) primary key auto_increment, 
  name varchar(10) not null 
); 
insert into groups(name) values('开发部'); 
insert into groups(name) values('销售部');
ログイン後にコピー

従業員が誰であるかをクエリする「開発部」にて

drop table if exists emps; 
create table if not exists emps( 
  id int(5) primary key auto_increment, 
  name varchar(10) not null, 
  gid int(5) not null, 
  constraint gid_fk foreign key(gid) references groups(id) 
); 
insert into emps(name,gid) values('哈哈',1); 
insert into emps(name,gid) values('呵呵',1); 
insert into emps(name,gid) values('嘻嘻',2); 
insert into emps(name,gid) values('笨笨',2);
ログイン後にコピー

--- ----------------------------------- --------------- -

多対多: 生徒「Zhao」が教えたクエリ

生徒テーブルを作成

select g.name "部门",e.name "员工" 
from groups g inner join emps e 
on g.id = e.gid 
where g.name = '开发部'; 
-- 
select g.name "部门",e.name "员工" 
from groups g inner join emps e 
on g.id = e.gid 
where g.name = '开发部';
ログイン後にコピー

教師テーブルを作成

drop table if exists students; 
create table if not exists students( 
  id int(5) primary key auto_increment, 
  name varchar(10) not null 
); 
insert into students(name) values('哈哈'); 
insert into students(name) values('嘻嘻');
ログイン後にコピー

中間テーブルの主キー(sid,tid)を作成します。 Express 結合された主キー、これら 2 つのフィールド全体が一意である必要があります

drop table if exists teachers; 
create table if not exists teachers( 
  id int(5) primary key auto_increment, 
  name varchar(10) not null 
); 
insert into teachers(name) values('赵'); 
insert into teachers(name) values('刘');
ログイン後にコピー

生徒「Zhao」が教えたクエリ

りー

----------------------------------------------------------- ------------------------------ -------------------- -------------------

収入が 5,000 元を超える従業員 (含む) は「高給」としてマークし、それ以外の場合は「初任給」としてマークします

給与が NULL の従業員を「給与なし」としてマークします

給与が 5,000 元 (含む) を超える従業員を「高給与」としてマークします、それ以外の場合は「初任給」とマークします

7,000 元の従業員をマークします6,000元の従業員は「中給与」、5,000元は「初任給」、それ以外の従業員は「試用給与」としてマークされます

--- -------------- ------------------------------------ -------------- ------------------------------------ --

内部結合 (等価結合): 顧客名のクエリ、注文番号、注文価格

[注: 顧客 c 内部結合注文 o はエイリアスを使用し、o は将来の注文を表します]

drop table if exists middles; 
create table if not exists middles( 
  sid int(5), 
  constraint sid_fk foreign key(sid) references students(id), 
  tid int(5), 
  constraint tid_fk foreign key(tid) references teachers(id), 
  primary key(sid,tid)  
); 
insert into middles(sid,tid) values(1,1); 
insert into middles(sid,tid) values(1,2); 
insert into middles(sid,tid) values(2,1); 
insert into middles(sid,tid) values(2,2);
ログイン後にコピー

on + 2 つのテーブルを接続するための条件。 1 つのテーブルと 1 つのテーブルの外部キーの結合

内部結合: 接続条件に従って 2 つのテーブルに存在するレコードのみをクエリできます。これは数学の交差に似ています

--- ----- --------------------------------------

外部結合:顧客ごとにグループ化し、各顧客の名前と注文番号をクエリします

外部結合: 接続条件に従って両方のテーブルに存在するレコードをクエリしたり、一方の当事者を他方の当事者に強制的に接続することもできます条件を満たすレコードもクエリできます。

外部結合は次のように分割できます。

select t.name "老师",s.name "学生" 
from students s inner join middles m inner join teachers t 
on (s.id=m.sid) and (m.tid=t.id) 
where t.name = '赵'; 
-- 
select t.name "老师",s.name "学生" 
from students s inner join middles m inner join teachers t  
on (s.id=m.sid) and (t.id=m.tid) 
where t.name = "赵";
ログイン後にコピー

左外部結合は、左側のコンテンツが表示されることを意味します。顧客の特​​定の列の内容がすべて表示されます

-------------------------------- ---------------- --------
自己関係: AA の上司が EE かどうか調べてください。自分自身を 2 つのテーブルだと考えてください。両側に 1 つずつ

select c.name "客户姓名",o.isbn "订单编号",o.price "订单价格" 
from customers c inner join orders o 
on c.id = o.customers_id; 
-- 
select c.name "客户姓名",o.isbn "订单编号",o.price "订单价格" 
from customers c inner join orsers o 
on c.id = o.customers_id;
ログイン後にコピー

-------------------------------------- --- --------------------------------------------------- --- -------
MySQL の関数のデモ (クエリマニュアル)

日付と時刻の関数:

<左外连接 : 以左侧为参照,left outer join表示 
select c.name,count(o.isbn) 
from customers c left outer join orders o 
on c.id = o.customers_id 
group by c.name; 
-- 
>右外连接 : 以右侧为参照,right outer join表示 
select c.name,count(o.isbn) 
from orders o right outer join customers c 
on c.id = o.customers_id 
group by c.name;
ログイン後にコピー

文字列関数:

select users.ename,bosss.ename 
from emps users inner join emps bosss 
on users.mgr = bosss.empno; 
select users.ename,bosss.ename 
from emps users left outer join emps bosss 
on users.mgr = bosss.empno;
ログイン後にコピー

数学関数:

select addtime(&#39;2016-8-7 23:23:23&#39;,&#39;1:1:1&#39;);  时间相加 
select current_date(); 
select current_time(); 
select now(); 
select year( now() ); 
select month( now() ); 
select day( now() ); 
select datediff(&#39;2016-12-31&#39;,now());
ログイン後にコピー


暗号化関数:

select md5('123456');

32 ビットの 16 進数 e10adc3949ba59abbe56e057f20f883e を返します

MySQL のプロセス制御ステートメントを示します

select charset(&#39;哈哈&#39;); 
select concat(&#39;你好&#39;,&#39;哈哈&#39;,&#39;吗&#39;); 
select instr(&#39;www.baidu.com&#39;,&#39;baidu&#39;); 
select substring(&#39;www.baidu.com&#39;,5,3);
ログイン後にコピー

5000 元になります (給与が NULL の従業員は「給与なし」としてマークされます

select bin(10); 
select floor(3.14);//比3.14小的最大整数---正3 
select floor(-3.14);//比-3.14小的最大整数---负4 
select ceiling(3.14);//比3.14大的最小整数---正4 
select ceiling(-3.14);//比-3.14大的最小整数---负3,一定是整数值 
select format(3.1415926,3);保留小数点后3位,四舍五入 
select mod(10,3);//取余数 
select rand();//
ログイン後にコピー


5,000 元 (込み) を超える給与を得る従業員には「高給与」のマークが付けられ、それ以外の場合は「高給与」のマークが付けられます「初任給」

use json; 
drop table if exists users; 
create table if not exists users( 
  id int(5) primary key auto_increment, 
  name varchar(10) not null unique, 
  sal int(5) 
); 
insert into users(name,sal) values(&#39;哈哈&#39;,3000); 
insert into users(name,sal) values(&#39;呵呵&#39;,4000); 
insert into users(name,sal) values(&#39;嘻嘻&#39;,5000); 
insert into users(name,sal) values(&#39;笨笨&#39;,6000); 
insert into users(name,sal) values(&#39;明明&#39;,7000); 
insert into users(name,sal) values(&#39;丝丝&#39;,8000); 
insert into users(name,sal) values(&#39;君君&#39;,9000); 
insert into users(name,sal) values(&#39;赵赵&#39;,10000); 
insert into users(name,sal) values(&#39;无名&#39;,NULL);
ログイン後にコピー


7,000 元を稼ぐ従業員を「高給」としてマークし、6,000 元を稼ぐ従業員を「中給」としてマークします。5000 元は「初任給」としてマークされ、それ以外の場合は次のようにマークされます。 「お試し給料」

りー

以上がMySQl データベースが知っておく必要がある SQL ステートメントの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート