目录
- 创建和删除数据库 CREATE DROP DATABASE
- 创建数据库表 CREATE TABLE
- 修改表名、表结构 ALTER TABLE
- MySQL中的数据类型
- 查询语句
- 查询表中所有列数据、查询指定列数据 SELECT FROM
- 查询时加上指定条件 SELECT FROM WHERE IN (NOT IN ) (BETWEEN AND) (NOT BETWEEN AND) LIKE
- 查询时指定NULLNOT NULL 条件
- 查询时指定字段的值不能重复 DISTINCT
- 查询时按照指定字段升降序排序 默认升序,DESC为降序
- 分组查询 GROUP BY
- 内连接查询 INNER JOIN ON
- 外连接 LEFT JOIN左连接
- 外连接 RIGHT JOIN右连接
- 子查询 ANY SOME ALL EXISTS IN
- 合并查询结果 UNION (UNION ALL)将多个SELECT语句的结果组合成一个结果集合
- 正则表达式查询 REGEXP
- 插入数据 INSERT INTO
- 更新数据 UPDATE
- 删除数据 DELETE
创建和删除数据库 CREATE DROP DATABASE
CREATE DATABASE db_name;
DROP DATABASE db_name;
创建数据库表 CREATE TABLE
CREATE TABLE tb_t3 (
id INT(11) ,
name VARCHAR(25)
);
使用主键约束的两种形式 PRIMARY KEY
//直接再定义列同时指定主键
CREATE TABLE tb_t3 (
id INT(11) PRIMARY KEY,
name VARCHAR(25)
);
//在定义完所有列之后指定主键
CREATE TABLE tb_t3 (
id INT(11) ,
name VARCHAR(25),
PRIMARY KEY (id)
);
//主键由多个字段联合组成
CREATE TABLE tb_t3 (
id INT(11) ,
name VARCHAR(25),
PRIMARY KEY (id,name)
);
使用外键约束 FOREIGN KEY
外键用来在两个表的数据之间建立连接,可以是一列或者多列。
外键:首先它是表中的一个字段,虽可以不是本表的主键,但要对应另外一个表的主键。外键的主要作用是保证数据引用的完整性,定义外键后,不允许删除在另一个表中具有关联关系的行。
CREATE TABLE tb_emp5(
id INT(11) PRIMARY KEY,
name VARCHAR(22) ,
deptId INT(11),
CONSTRAINT fk_emp_dept1 FOREIGN KEY(deptId) REFRERNCES tb_dept1(id)
);
//以上语句执行成功之后,在表tb_emp5上添加了名称为fk_emp_dept1的外键约束,外键名称为deptId,其依赖于表tb_dept1的主键id。
字段值非空约束 NOT NULL
CREATE TABLE tb_t3 (
id INT(11) NOT NULL,
name VARCHAR(25),
PRIMARY KEY (id)
);
字段值唯一性约束两种方式 UNIQUE
id INT(11) UNIQUE,
name VARCHAR(25),
PRIMARY KEY (id)
);
CREATE TABLE tb_dept3
(
id INT(11) PRIMARY KEY,
name VARCHAR(22),
location VARCHAR(50),
CONSTRAINT STH UNIQUE(name)
);
指定字段默认值 DEFAULT
// deptId 默认值为1111
CREATE TABLE tb_emp7
(
id INT(11) PRIMARY KEY,
name VARCHAR(25) NOT NULL,
deptId INT(11) DEFAULT 1111,
salary FLOAT
);
指定字段值自增 AUTO_INCREMENT
CREATE TABLE tb_emp8
(
id INT(11) PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(25) NOT NULL,
deptId INT(11),
salary FLOAT
);
使用DESCRIBE和DESC查看表结构
DESC tb_emp1;
DESCRIBE tb_dept1;
修改表名、表结构 ALTER TABLE
修改表名 ALTER TABLE RENAME
//将数据表tb_dept3改名为tb_deptment3。
ALTER TABLE tb_dept3 RENAME tb_deptment3;
修改表中的字段数据类型、调整字段位置 ALTER TABLE MODIFY
//将数据表tb_dept1中name字段的数据类型由VARCHAR(22)修改成VARCHAR(30)。
ALTER TABLE tb_dept1 MODIFY name VARCHAR(30);
//将数据表tb_dept中的column1字段修改为表的第一个字段,SQL语句如下:
ALTER TABLE tb_dept1 MODIFY column1 VARCHAR(12) FIRST;
//将数据表tb_dept1中的column1字段插入到location字段后面,SQL语句如下:
ALTER TABLE tb_dept1 MODIFY column1 VARCHAR(12) AFTER location;
修改表中字段名称 ALTER TABLE CHANGE
//将数据表tb_dept1中的location字段名称改为loc,数据类型保持不变,SQL语句如下:
ALTER TABLE tb_dept1 CHANGE location loc VARCHAR(50);
在数据库表中添加新字段 ALTER TABLE ADD
//在数据表tb_dept1中添加一个没有完整性约束的INT类型的字段managerId(部门经理编号),SQL语句如下:
ALTER TABLE tb_dept1 ADD managerId INT(10);
//在数据表tb_dept1中添加一个不能为空的VARCHAR(12)类型的字段column1,SQL语句如下:
ALTER TABLE tb_dept1 ADD column1 VARCHAR(12) not null;
//在数据表tb_dept1中添加一个INT类型的字段column2,SQL语句如下:
ALTER TABLE tb_dept 1ADD column2 INT(11) FIRST;
//在数据表tb_dept1中name列后添加一个INT类型的字段column3,SQL语句如下:
ALTER TABLE tb_dept1 ADD column3 INT(11) AFTER name;
删除中表中指定字段 ALTER TABLE DROP
//删除数据表tb_dept1表中的column2字段。
ALTER TABLE tb_dept1 DROP column2;
MySQL中的数据类型
整型
浮点数
日期时间
文本字符串
二进制字符串
查询语句
查询表中所有列数据、查询指定列数据 SELECT FROM
//从fruits表中检索所有字段的数据,SQL语句如下:
SELECT * FROM fruits;
//查询fruits表中f_name列所有水果名称,SQL语句如下:
SELECT f_name FROM fruits;
查询时加上指定条件 SELECT FROM WHERE IN (NOT IN ) (BETWEEN AND) (NOT BETWEEN AND) LIKE
//查询价格为10.2元的水果的名称,SQL语句如下:
SELECT f_name, f_price
FROM fruits
WHERE f_price = 10.2;
//s_id为101和102的记录,SQL语句如下:
SELECT s_id,f_name, f_price
FROM fruits
WHERE s_id IN (101,102)
ORDER BY f_name;
//查询所有s_id不等于101也不等于102的记录,SQL语句如下:
SELECT s_id,f_name, f_price
FROM fruits
WHERE s_id NOT IN (101,102)
ORDER BY f_name;
//查询价格在2.00元到10.20元之间的水果名称和价格,SQL语句如下:
SELECT f_name, f_price
FROM fruits WHERE f_price
BETWEEN 2.00 AND 10.20;
//查询价格在2.00元到10.20元之外的水果名称和价格,SQL语句如下:
SELECT f_name, f_price
FROM fruits
WHERE f_price NOT BETWEEN 2.00 AND 10.20;
//查找所有以’b’字母开头的水果,SQL语句如下:
SELECT f_id, f_name
FROM fruits
WHERE f_name LIKE 'b%';
//在fruits表中,查询f_name中包含字母’g’的记录,SQL语句如下:
SELECT f_id, f_name
FROM fruits
WHERE f_name LIKE '%g%';
//查询以’b’开头,并以’y’结尾的水果的名称,SQL语句如下:
SELECT f_name
FROM fruits
WHERE f_name LIKE 'b%y';
查询时指定NULLNOT NULL 条件
//查询customers表中c_email为空的记录的c_id、c_name和c_email字段值,SQL语句如下:
SELECT c_id, c_name,c_email FROM customers WHERE c_email IS NULL;
//查询customers表中c_email不为空的记录的c_id、c_name和c_email字段值,SQL语句如下:
SELECT c_id, c_name,c_email FROM customers WHERE c_email IS NOT NULL;
查询时指定字段的值不能重复 DISTINCT
//查询fruits表中s_id字段的值,返回s_id字段值且不得重复,SQL语句如下:
SELECT DISTINCT s_id FROM fruits;
查询时按照指定字段升降序排序 默认升序,DESC为降序
//查询fruits表,先按f_price降序排序,再按f_name字段升序排序,SQL语句如下:
SELECT f_price, f_name FROM fruits ORDER BY f_price DESC, f_name;
分组查询 GROUP BY
//根据s_id对fruits表中的数据进行分组,SQL语句如下:
SELECT s_id, COUNT(*) AS Total FROM fruits GROUP BY s_id;
//根据s_id对fruits表中的数据进行分组,将每个供应商的水果名称显示出来,SQL语句如下:
SELECT s_id, GROUP_CONCAT(f_name) AS Names FROM fruits GROUP BY s_id;
//根据s_id对fruits表中的数据进行分组,并显示水果种类大于1的分组信息,SQL语句如下:
SELECT s_id, GROUP_CONCAT(f_name) AS Names
FROM fruits
GROUP BY s_id HAVING COUNT(f_name) > 1;
内连接查询 INNER JOIN ON
//fruits表和suppliers表中都有相同数据类型的字段s_id,两个表通过s_id字段建立联系。接下来从fruits表中查询f_name、f_price字段,从suppliers表中查询s_id、s_name,SQL语句如下:
SELECT suppliers.s_id, s_name,f_name, f_price
FROM fruits ,suppliers
WHERE fruits.s_id = suppliers.s_id;
//在fruits表和suppliers表之间,使用INNER JOIN语法进行内连接查询,SQL语句如下:
SELECT suppliers.s_id, s_name,f_name, f_price
FROM fruits INNER JOIN suppliers
ON fruits.s_id = suppliers.s_id;
外连接 LEFT JOIN左连接
左连接的结果包括LEFT OUTER子句中指定的左表的所有行,而不仅仅是连接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果行中,右表的所有选择列表列均为空值。
//在customers表和orders表中,查询所有客户,包括没有订单的客户,SQL语句如下:
SELECT customers.c_id, orders.o_num
FROM customers LEFT OUTER JOIN orders
ON customers.c_id = orders.c_id;
外连接 RIGHT JOIN右连接
右连接是左连接的反向连接,将返回右表的所有行。如果右表的某行在左表中没有匹配行,左表将返回空值。
//在customers表和orders表中,查询所有订单,包括没有客户的订单,SQL语句如下:
SELECT customers.c_id, orders.o_num
FROM customers RIGHT OUTER JOIN orders
ON customers.c_id = orders.c_id;
子查询 ANY SOME ALL EXISTS IN
子查询指一个查询语句嵌套在另一个查询语句内部的查询
//返回tbl2表的所有num2列,然后将tbl1中的num1的值与之进行比较,只要大于num2的任何1个值,即为符合查询条件的结果。
SELECT num1 FROM tbl1 WHERE num1 > ANY (SELECT num2 FROM tbl2);
//返回tbl1表中比tbl2表num2 列所有值都大的值,SQL语句如下:
SELECT num1 FROM tbl1 WHERE num1 > ALL (SELECT num2 FROM tbl2)
//查询suppliers表中是否存在s_id=107的供应商,如果存在,则查询fruits表中的记录,SQL语句如下:
SELECT * FROM fruits
WHERE EXISTS
(SELECT s_name FROM suppliers WHERE s_id = 107);
合并查询结果 UNION (UNION ALL)将多个SELECT语句的结果组合成一个结果集合
使用UNION ALL包含重复的行,在前面的例子中,分开查询时,两个返回结果中有相同的记录。UNION从查询结果集中自动去除了重复的行,如果要返回所有匹配行,而不进行删除,可以使用UNION ALL。
//查询所有价格小于9的水果的信息,查询s_id等于101和103所有的水果的信息,使用UNION连接查询结果,SQL语句如下:
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);
正则表达式查询 REGEXP
SELECT * FROM fruits WHERE f_name REGEXP '^b';
插入数据 INSERT INTO
INSERT INTO table_name (column_list) VALUES (value_list);
更新数据 UPDATE
UPDATE table_name
SET column_name1 = value1,column_name2 = value2
WHERE (condition);
删除数据 DELETE
DELETE FROM table_name [WHERE<condition>];