MySQL基本语法学习笔记

创建和删除数据库 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中的数据类型

整型

img
img

浮点数

img

日期时间

img

文本字符串

img

二进制字符串

img

查询语句

img

查询表中所有列数据、查询指定列数据 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';

查询时指定NULL\NOT 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';

img

插入数据 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>];

posted @ 2020-06-08 11:09  Cloud_9527  阅读(173)  评论(0编辑  收藏  举报