http://www.runoob.com/mysql/mysql-install.html
书籍:https://pan.baidu.com/s/1fIVAXZnZH7u_DDRIyjLTRQ
mysql登陆:
mysql -uroot -p 输入密码
增加用户:
mysql > create user 'dog''@''localhost'identified by '123';
查看用户:
mysql>select user,host from mysql.user;
删除用户:
mysql> drop user 'dog'@'localhost';
查看数据库:
mysql>show databases;
创建数据库:
mysql>create database students;
删除数据库:
mysql>drop database students;
查看数据库表:
mysql>use mysql;
mysql>show tables;
增加数据库表:
mysql>use students;
mysql>create table pet(
name varchar(20), #名字
owner varchar(20), #主人
species varchar(20), #种类
sex char(1), #性别
birth date, #出生日期
death date #死亡日期
);
describe pet;(查看)
https://blog.youkuaiyun.com/HUIJINJAVA/article/details/79233998
删除数据库表:
mysql>drop pet;
将表中记录清空:
mysql>delete from pet;
修改表:
1.修改表添加列
alter table 表名 add 字段 类型(长度)约束
2.修改表修改列的类型长度约束
alter table 表名 modify 字段名 类型(长度) 约束;
3.修改表,修改列名
alter table 表名 change 旧字段名 新字段名 类型(长度) 约束;
4.修改表的字符集
alter table 表名 character set 字符集
5.重命名表
rename table 旧表名 to 新表名
6.在表的第一列添加一个字段
alter table tb_dept1 add column2 int(11) first;
7.在表的指定列之后添加一个字段
alter table tb_dept1 add column3 int(11) after name
8.删除字段
alter table tb_dept1 drop column2
9.修改字段为表的第一个字段
alter table tb_dept1 modify column1 varchar(12) first
数据库表的增删查改:
1,插入数据:
给某几列插入数据:insert into 表名(列1,列2,列3…) values(值1,值2,值3…);
给所有列插入数据:insert into 表名values(值1,值2,值3…);
一次性插入多行数据: insert into 表名values(值1,值2,值3…),(值1,值2,值3…),(值1,值2,值3…)…;
注意事项:
有值的类型要与数据库中列的类型一致。
值的顺序要与列的顺序保持一致。
插入值的长度不能超过列规定的长度。
对于字符串和时间的值,要使用引号括起来。
插入的数据要符合约束
2,修改数据
update 表名 set 列名1=值1,列名2=值2…[where条件];
3,查询数据
1.基本查询语句
查询所有列
select * from 表名
查询指定列
select列1,列2…from 表名
.条件查询 where
1.比较运算 > >= < <= <> !=
2.条件并列 and or not
模糊查询 like
in
between and
3.排序
select * from 表名 [where 条件] order by 列名 asc/desc,列名 asc/desc …
ASC : 升序
DESC : 降序
4.分组
1.select s_id,count(*) as total fruits group by s_id
2.select s_id,group_count (f_name) as names from fruits group by s_id//
将每个供应商水果名称显示出来
3.select s_id,group_concat(f_name) as names from fruits group by s_id having
count(f_name)>1 //根据s_id对fruits表中的数据进行分组,并显示水果种类大于1的分组信息
4.select s_id,count(*) as total from fruits group by s_id with rollup//
根据s_id对fruits表中的数据进行分组,并显示记录数量
5.select o_sum,sum(quantity * item_price) as ordertotal from orderitems
group by o_num having sum(quantity*item_price)>=100//查询订单价格
大于100的订单号和总订单价格
6.select sum(quantity) as items_total from orderitems where o_num=30005//
orderitem中查询30005号订单一共购买的水果总量
7.select o_num.sum(quantity) as items_total from orderitems
group by o_num;在orderitems表中,使用sum函数统计不同订单号订购的
水果总量
8.select avg(f_price) as avg_price from fruits where s_id=103;
//在fruits表中,查询s_id=103的供应商水果价格的平均值
9.select s_id ,avg(f_price) as avg_price from fruits group by s_id;//
在fruits表中,查询每一个供应商水果价格的平均值
10.select max(f_price) as max_price from fruits;//在fruits表中
查找市场上价值最高的水果值
11.select s_id,max(f_price) as max_price from fruits group by s_id;//
在fruits表中查找不同供应商提供的价格最高的水果值
12.select max(f_name) from fruits;//在fruits表中查找f_name的
最大值
13.select min(f_price) as min_price from fruits;//在fruits
表中查找市场上价格最低的水果值
14.select suppliers.s_id,s_name,f_name,f_price from
fruits ,suppliers where fruits.s_id =suppliers.s_id;
select suppliers.s_id,s_name.f_name,f_price from fruits
inner join suppliers on fruits.s_id =suppliers.s_id;
//查询两个表都有s_id的部分
15.select f1.f_id,f1.f_name from fruits as f1,fruits as f2
where f1.s_id =f2.s_id and f2.f_id ='a1';
//查询供应f_id ='a1'的水果供应商提供的水果种类
16.select num1 from tbl1 where num1> any(select num2 from tbl2)//
返回tbl2表的所有num2列,然后将tbl1中的num1的值与之比较,只要
大于bun2的任何一个值,即为符合查询条件的结果
17. select num1 from tbl1 where num1 >all(select num2 from tbl2)
//返回tbl1表中比tbl2表num2列所有值都大的值
18.select *from fruits where exists (select s_name suppliers where s_id=107)
查询suppliers表中是否存在s_id=107的供应商,如果存在,则查询fruits表中的记录
19.select *from fruits where f_price >10.20 and exists
(select s_name from suppliers where s_id=107)
查询suppliers表中是否存在s_id=107的供应商,如果存在,则查询fruits表中
的f_price大于10.20的记录
20.select c_id from orders where o_num in (select o_num from orderitems where f_id='c0');
在orderitems表中查询f_id为c0的订单,并根据订单号查询具有订单号的客户c_id
21.select s_id ,f_name from fruits where s_id=(select s1.s_id from suppliers as where s1.s_city ='tianjin');
在suppliers表中查询s_city等于'tianjin'的供应商s_id,然后在fruits表中查询
所有该供应商提供的水果的种类
22.select s_id ,f_name from fruits where s_id <>
(select sq.s_id from suppliers as s1 where s1.s_city ='tianjin')
在suppliers表中查询s_city等于‘tianjin’的供应商s_id,然后再fruits表中查询所有非该水果供应商提供的水果的种类
23.select s_id ,f_name,f_price from fruits where f_price<9.0
union all select s_id,f_name ,f_price from fruits where s_id in(101,103);
联合查询价格小于9,查询s_id等于101和103所有的水果信息
24.select * from order as o where o.o_num=30001;
//为表取别名
25.select c.c_id,o.o_num from customers as c left outer join orders as o on
c.c_id=o.o_id
//为customers和orders表分别取别名,并进行连接查询
26.select f1.f_id,f1.f_name from fruits as f1,fruits as f2
where f1.s_id =f2.s_id and f2.f_id ='a1';
//查询同一个表
27.select concat(trim(s_name),'(',trim(s_city),')') as
suppliers_title from suooliers order by s_name;
//对连接的列取别名
28.select *from fruits where f_name regexp '^b';
//查询f_name字段以字母‘b’开头的记录
29.select *from fruits where f_name regexp 'y$';
//查询以y结尾的字段
30.select *from fruits where f_name regexp 'a.g';
//查询f_name字段值包含字母‘a’与'g'且俩字母间只有一个字母的
记录
31.select *from fruits where f_name regexp '^ba*';
//查询f_name字段值以字母'b'开头且字母‘b’后面出现字母‘a’的记录
32.select *from fruits where f_name regexp 'on';
查询f_name字段值包含字符串‘on’的记录
33.select *from fruits where f_name regexp 'on|ap';
//查询包含on或ap的记录
34.select *from fruits where f_name like 'on';
在fruits表中,使用like运算符查询f_name字段值为'on'的记录
35.select *from fruits where f_name regexp '[ot]';
在fruits表中,查找f_name字段中包含字母'o'或者't'的记录
36.select *from fruits where s_id regexp '[456]';
在fruits表中查询s_id字段中数值包含4 或5或 6的记录
37.select *from fruits where f_id regexp '[^a-e1-2]'
//在fruits表中,查询f_id字段包含字母a-e和数字1-2意外的字符记录
38.select *from fruits where f_name regexp 'x{2,}';
//在fruits表中,查询f_name字段值出现字母‘x’至少2次的记录
39.select *from fruits where f_name frgexp 'ba{1,3}';
//查询f_name字段值出现字母‘ba’最少一次,最多3次的记录
40.
group by 分组字段 having
**注意:where子句不能使用聚合函数,如果现在使用带有聚合函数的条件过滤或者分组后过滤,使用having关键字**
5.聚合函数
sum
avg
count
min
max
6.sql语句的基本顺序
select ... from 表名 where 条件 group by 分组字段 having 筛选后条件 order by 排序字段
3. 多表联合查询(*****)
1.连接查询
交叉链接 cross join 二张表的笛卡尔积
SELECT * FROM A CROSS JOIN B
SELECT * FROM A,B
内链接 二张表的交集部分(满足连接条件的数据组合)
显式内连接 inner join
SELECT * FROM A INNER JOIN B ON A.ID = B.ID
隐式内连接
SELECT * FROM A ,B WHERE A.ID = B.ID
外连接 OUTER JOIN OUTER可以省略
左外链接 左表的所有数据,与二张表的交集(左表的所有数据与满足连接条件的数据组合)
SELECT * FROM A LEFT OUTER JOIN B ON A.ID = B.ID
右外链接 OUTER 可以省略 右表的所有数据,与二张表的交集(右表的所有数据与满足连接条件的数据组合)
SELECT * FROM A RIGHT OUTER JOIN B ON A.ID = B.ID
2.子查询 : SQL的嵌套 (一个查询语句,依赖于另一个查询语句的结果)
数据库的导入导出:
mysqldump -h IP -u 用户名 -p 数据库名 > 导出的文件名;(导出)
0:导入数据库(首先得创建数据,再导入)
mysql -h localhost -u root -p(进入mysql下面)
create database abc;(创建数据库)
show databases;(就可看到所有已经存在的数据库,以及刚刚创建的数据库abc)
use abc;(进入abc数据库下面)
show tables;(产看abc数据库下面的所有表,空的)
source G:\arcgisworkspace\zypdoc\test.sql(导入数据库表)
show tables;(查看abc数据库下面的所有表,就可以看到表了)
desc pollution;(查看表结构设计)
select * from pollution;
exit(或者ctrl + c)退出mysql
https://www.cnblogs.com/tangou/p/7613896.html
数据库表的导入导出:
mysqldump -u用户名 -p密码 数据库名 > 数据库名.sql(导出数据和表结构:
https://blog.youkuaiyun.com/qq_27563511/article/details/78563040
CREATE TABLE Student ( Sno CHAR(5) CONSTRAINT PK_Stu PRIMARY KEY, Sname CHAR(20) CONSTRAINT UQ1 UNIQUE, Ssex CHAR(2), Sage INT NOT NULL CONSTRAINT UQ2 UNIQUE CONSTRAINT CK1 CHECK(Sage>=15 AND Sage<=35), Sdept CHAR(15), CHECK(Ssex IN ('男','女') AND Sno LIKE '95___ ') );