MySQL(五)上DQLデータ照会言語(sql文)
26445 ワード
詳細SQL情報:w 3 c SQL標準ドキュメントを表示できます
DQL:まずテスト環境を構築します.
プライマリ・キーの削除
プライマリ・キーの追加
外部キーを追加:
データの挿入
列の追加:表彰列の追加
評価ランダム値の挿入
注記:round四捨五- 3は小数点後-3位を表します.rand 0~1乱数
管理カラムを追加し、値を割り当てます:()
サブクエリで文を更新します.
文を削除:
変更:
関数:重量除去:distinct例:
ファジイクエリ:''1文字'%'の代わりに0~N文字に一致
ソート:Order by昇順asc降順desc(デフォルトはasc昇順)
集約:
総数:count(*)空の場合は積算に参加しません例えばmanagerにnullが2つあります
平均値avg()最大max()最小min()和sum(sal);計算できない場合は、たとえば漢字の代わりにデフォルトで0を使用します.
グループクエリーgroupbyグループフィールドは、各部門の従業員数を計算します.
各部門の給与が12000を超える従業員の数を計算します.
havingは前のクエリの結果を条件として判断する.各部門の従業員の給料が12000より大きく、2人以上の部門を見つけます.
内部リンクないりんく:inner
外部リンク:左外部リンク:left outer join左のテーブルを主とし、右が空でnullで塗りつぶす
右外部リンク:right outer joinは右側のテーブルを主とし、左は空でnullで埋め込まれます.
全外リンクの真ん中にunionリンクを使用します.(作用、左右のどちらかを多用する場合)
サブクエリ:サブクエリが表示される場所は、select(サブクエリが標準ではない)from(サブクエリ)where(サブクエリ)
例:
ページング:limitの開始位置、何本取るか;
関数:テーブル挿入テーブル:select*intoインデックス作成CREATE INDEX条件チェックチェックチェック
DQL:まずテスト環境を構築します.
mysql -uroot -proot
show databases;
drop database test;
create database test CHARACTER SET 'utf8';
use test;
drop table if exists empl;
create table empl(
id int primary key auto_increment,
name varchar(50),
department_id int,
hire DATE,
phone CHAR(20),
job VARCHAR(50),
comm decimal(8,2),
sal float(8,2),
CONSTRAINT fk_empl_dept FOREIGN KEY (department_id) REFERENCES department (id)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
create table department(
id int primary key auto_increment,
dname VARCHAR(50)
)default charset=utf8;
alter table empl rename to ; // table
alter table empl modify job varchar(40); //
alter table empl add(note varchar(200)) //
alter table empl drop note //
プライマリ・キーの削除
:
ALTER TABLE empl MODIFY COLUMN id INTEGER(11) NOT NULL;
ALTER TABLE empl DROP INDEX PRIMARY;
プライマリ・キーの追加
ALTER TABLE `user` MODIFY COLUMN `id` INT AUTO_INCREMENT PRIMARY KEY;
外部キーを追加:
ALTER TABLE `empl` ADD CONSTRAINT `fk_empl_dept` FOREIGN KEY
(`department_id`) REFERENCES `department` (`id`);
データの挿入
insert into department values (10,' '),(20,' '),(30,' '),(40,' ');
insert into empl VALUES(0,' ','10','2000-12-22',123456789,' ',8000.00);
insert into empl VALUES(0,' ','10','2002-7-12',123499689,' ',20000.00);
insert into empl VALUES(0,' ','10','2001-10-2',123422229,' ',16000.00);
insert into empl VALUES(0,' ','10','2002-7-12',123499989,' ',8700.00);
insert into empl VALUES(0,' ','10','2003-4-18',123433389,' ',8400.00);
insert into empl VALUES(0,' ','10','2003-4-18',123433389,' ',8400.00);
insert into empl VALUES(0,' ','10','2003-4-18',123433389,' ',8400.00);
insert into empl VALUES(0,' ','10','2003-4-18',123433389,' ',8400.00);
insert into empl VALUES(0,' ','20','2003-2-10',123455789,' ',1000.00);
insert into empl VALUES(0,' ','20','2001-8-17',123458889,' ',6000.00);
insert into empl VALUES(0,' ','20','2003-2-10',123455789,' ',10000.00);
insert into empl VALUES(0,' ','20','2003-2-10',123455789,' ',10000.00);
insert into empl VALUES(0,' ','20','2002-4-11',123453789,' ',8000.00);
insert into empl VALUES(0,' ','20','2003-2-10',123455789,' ',19000.00);
insert into empl VALUES(0,' ','20','2003-2-10',123455789,' ',10000.00);
insert into empl VALUES(0,' ','20','2002-4-11',123453789,' ',8000.00);
insert into empl VALUES(0,' ','20','2003-2-10',123455789,' ',19000.00);
insert into empl VALUES(0,' ','30','2003-2-10',123455789,' ',1000.00);
insert into empl VALUES(0,' ','30','2001-8-17',123458889,' ',6000.00);
insert into empl VALUES(0,' ','30','2003-2-10',123455789,' ',19000.00);
insert into empl VALUES(0,' ','30','2002-4-11',123453789,' ',8000.00);
insert into empl VALUES(0,' ','30','2002-4-11',123453789,' ',8000.00);
insert into empl VALUES(0,' ','30','2003-2-10',123455789,' ',19000.00);
insert into empl VALUES(0,' ','30','2003-2-10',123455789,' ',10000.00);
insert into empl VALUES(0,' ','30','2001-8-17',123458889,' ',6000.00);
列の追加:表彰列の追加
alter table empl add(comm decimal(9,2));
評価ランダム値の挿入
update empl set sal=round(rand()*10000,-3), comm=round(rand()*10000,-3),
phone=(28000000+round(RAND()*100000,0))
where 1=1;
注記:round四捨五- 3は小数点後-3位を表します.rand 0~1乱数
管理カラムを追加し、値を割り当てます:()
ALTER TABLE `empl` ADD(mgr int);
サブクエリで文を更新します.
update empl e,(select * from empl where job=" ") d set e.mgr=d.id
where e.department_id=d.department_id and e.job!=" ";
文を削除:
delete from empl where id=8;
変更:
update empl set job=' ',sal=20001 where name=' ';
関数:重量除去:distinct例:
select distinct job from empl;
データ接続:concatケース:select concat(' ',name,', ',job) as ' ' from empl;
≪置換|Replace|ldap≫:空の場合は、次の値を指定します.select *,IFNULL(manager,' ') from empl;
ファジイクエリ:''1文字'%'の代わりに0~N文字に一致
select * from empl where name like ' __';
select * from empl where name like '% %';
ソート:Order by昇順asc降順desc(デフォルトはasc昇順)
select * from empl order by sal desc;
select * from empl where manager is not null order by sal desc,hire desc,job desc;
集約:
総数:count(*)空の場合は積算に参加しません例えばmanagerにnullが2つあります
select concat(' ',count(*) ,' , :'
,count(manager) ) ' ' from empl;
平均値avg()最大max()最小min()和sum(sal);計算できない場合は、たとえば漢字の代わりにデフォルトで0を使用します.
select sum(sal) ' ',avg(sal) ' ',max(sal) ' ',min(sal) ' ' from empl;
グループクエリーgroupbyグループフィールドは、各部門の従業員数を計算します.
select job,count(*),max(sal) from empl group by job;
各部門の給与が12000を超える従業員の数を計算します.
select job,count(*),max(sal) from empl where sal>12000 group by job;
havingは前のクエリの結果を条件として判断する.各部門の従業員の給料が12000より大きく、2人以上の部門を見つけます.
select job,count(*),max(sal) from empl where sal>12000 group by job having count(*)>=2;
内部リンクないりんく:inner
外部リンク:左外部リンク:left outer join左のテーブルを主とし、右が空でnullで塗りつぶす
select d.dname, e.name from
department d LEFT OUTER JOIN empl e
on e.department_id=d.id
右外部リンク:right outer joinは右側のテーブルを主とし、左は空でnullで埋め込まれます.
select d.dname, e.name from
department d right OUTER JOIN empl e
on e.department_id=d.id
全外リンクの真ん中にunionリンクを使用します.(作用、左右のどちらかを多用する場合)
select d.dname, e.name from
department d LEFT OUTER JOIN empl e
on e.department_id=d.id
union
select d.dname, e.name from
department d right OUTER JOIN empl e
on e.department_id=d.id
サブクエリ:サブクエリが表示される場所は、select(サブクエリが標準ではない)from(サブクエリ)where(サブクエリ)
例:
from( ):
select e.* from (select max(sal) sal from empl) es,empl e where e.sal = es.sal;
where( ):
select * from empl where sal=(select max(sal) from empl);
ページング:limitの開始位置、何本取るか;
select * from empl limit 0,5;
select * from empl limit 5,5;
select * from empl limit 10,5;
関数:テーブル挿入テーブル:select*intoインデックス作成CREATE INDEX条件チェックチェックチェック