MySQL 为关系型数据库(Relational Database Management System),一个关系型数据库由一个或数个表格组成。
登陆命令:
mysql –u用户名 [–h主机名或者IP地址,-P端口号] –p密码
–p密码选项不一定是要在最后; –u、-h、-p后无空格。
数据库操作
#查看数据库
show databases;
#选择一个数据库
use 数据库名;
#创建数据库
create database 数据库名;
#查看创建数据库的SQL语言
show create database 数据库名;
#删除数据库
DROP DATABASE 数据库名;
#查看表
show tables;
数据库表操作
#选择一个数据库
use 数据库名;
#创建表
create table student(id int(11) not null,name char(20));
#查看表结构
desc student;
+--------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+----------+------+-----+---------+-------+
| std_id | int(11) | NO | | NULL | |
| name | char(20) | YES | | NULL | |
+--------+----------+------+-----+---------+-------+
#插入数据
-- 不指定字段名称
INSERT user VALUE(1001,'king');
INSERT user VALUES(1001,'king');
-- 指定字段
insert into user(id,name) values(1001,’zhangsan’)[,(1002,lisi)];
insert user set id=1001 ,name='zhangsan',;
-- 获取其他表的数据插入
insert student(name) select name from user;
#查询数据
select * from student;
+--------+----------+
| std_id | name |
+--------+----------+
| 1001 | zhangsan |
+--------+----------+
#删除数据
delete from student where id=1001;
#修改数据
update student set name='LiSi' where id=1001;
#删除数据
delete from student where id=1001;
SELECT name FROM `test`
+------+
| name |
+------+
| tom |
| amy |
| tom |
+------+
SELECT DISTINCT name FROM `test`;
+------+
| name |
+------+
| tom |
| amy |
+------+
如果查询多列数据,要每一个数据相同才会被删除。
ORDER BY
语法:
SELECT column1, column2,...
FROM tbl
ORDER BY column1 [ASC|DESC], column2 [ASC|DESC],...
使用ORDER BY可以按照某个字段进行排序。 使用ASC或DESC按照升序或者降序排列。
SELECT name FROM `test` GROUP BY name DESC;
+------+
| name |
+------+
| tom |
| mus |
| amy |
+------+
默认是ASC升序。
WHERE
在查询语句中使用WHERE语句来设定查询条件。
SELECT * FROM test WHERE name='tom';
+-------------+------+-----+------+
| id | name | ps | code |
+-------------+------+-----+------+
| 00000000123 | tom | abc | 2221 |
| 00000000125 | tom | abc | 0133 |
+-------------+------+-----+------+
可以结合使用AND或OR的逻辑运算符。
自定义排序函数FIELD():
SELECT
orderNumber, status
FROM
orders
ORDER BY FIELD(status,
'key_part1',
'key_part2');
IN
在WHERE子句中,筛选符合匹配的数据。
SELECT * FROM test WHERE name IN ('tom');
+-------------+------+-----+------+
| id | name | ps | code |
+-------------+------+-----+------+
| 00000000123 | tom | abc | 2221 |
| 00000000125 | tom | abc | 0133 |
+-------------+------+-----+------+
带有子查询的MySQL IN
SELECT
orderNumber, customerNumber, status, shippedDate
FROM
orders
WHERE
orderNumber IN (SELECT
orderNumber
FROM
orderDetails
GROUP BY orderNumber
HAVING SUM(quantityOrdered * priceEach) > 60000);
运算顺序为:
-- 第一步
SELECT
orderNumber
FROM
orderDetails
GROUP BY orderNumber
HAVING SUM(quantityOrdered * priceEach) > 60000;
-- 第二步
SELECT
orderNumber, customerNumber, status, shippedDate
FROM
orders
WHERE
orderNumber IN (10165,10287,10310);
SELECT status,count(*) as total from orders GROUP BY `status` ;
+------------+----------+
| status | total |
+------------+----------+
| Cancelled | 6 |
| Disputed | 3 |
| In Process | 6 |
| On Hold | 4 |
| Resolved | 4 |
| Shipped | 303 |
+------------+----------+
连接
INNER JOIN
产生的结果集中,是两者某字段的交集。可以简写成join;
-- Table A 是左边的表。
-- Table B 是右边的表。
id name id name
-- ---- -- ----
1 **Pirate** 1 Rutabaga
2 Monkey 2 **Pirate**
3 **Ninja** 3 Darth Vader
4 Spaghetti 4 **Ninja**
SELECT * FROM TableA
INNER JOIN TableB
ON TableA.name = TableB.name
-- 结果:
id name id name
-- ---- -- ----
1 Pirate 2 Pirate
3 Ninja 4 Ninja