Mysql常见操作语句

超、凢脫俗 2021-09-15 17:02 505阅读 0赞

一、数据完整性
1、实体完整性
2、域完整性(列完整性约束):
指数据库表的列(即字段)必须符合某种特定的数据类型或约束。

  1. 约束:
  2. 类型约束: id int
  3. 长度约束: id int(3)
  4. 非空约束: username varchar(10) NOT NULL 必须有值
  5. 唯一约束: idcardnum varchar(18) UNIQUE 可以为null,有的话必须唯一
  6. 用户名:一般网站用户名必须有,且唯一(不让他作为主键)
  7. username varchar(100) NOT NULL UNIQUE
  8. 示例:
  9. CREATE TABLE user(
  10. id int PRIMARY KEY,
  11. username varchar(20) NOT NULL UNIQUE,
  12. idcardnum varchar(18) UNIQUE,
  13. gender varchar(10) NOT NULL
  14. );
  15. 专题:整数类型的主键自动增长。由数据库自己自动插入主键的值
  16. CREATE TABLE t1(
  17. id int PRIMARY KEY auto\_increment,\#主键自动增长
  18. name varchar(100)
  19. );
  20. INSERT INTO t1 (id,name) VALUES(1,‘A‘);
  21. INSERT INTO t1 (name) VALUES(‘B‘); (推荐)
  22. INSERT INTO t1 VALUES (null,‘C‘);
  23. 建议:尽量不要让数据库维护主键。(不是所有的数据库都有自动增长这个功能)
  24. 由应用来维护主键
  25. 3、参照完整性(重点:多表.外键)
  26. 3.1多表的设计
  27. a、一对多(出现频率最高)
  28. CREATE TABLE department(
  29. id int PRIMARY KEY,
  30. name varchar(100),
  31. addr varchar(100)
  32. );
  33. CREATE TABLE employee(
  34. id int PRIMARY KEY,
  35. name varchar(100),
  36. gender varchar(10),
  37. salary float(8,2),
  38. depart\_id int,
  39. CONSTRAINT depart\_id FOREIGN KEY(depart\_id) REFERENCES department(id)
  40. );
  41. 外键定义语法:
  42. CONSTRAINT 外键名称 FOREIGN KEY(外键字段) REFERENCES 主表名称(主键字段);
  43. 外键名称:随便定义,当前库中必须唯一
  44. 外键字段:当前表中那个字段是外键

  技术分享

  1. b、多对多(出现频率其次)
  2. CREATE TABLE teacher(
  3. id int PRIMARY KEY,
  4. name varchar(100),
  5. salary float(8,2)
  6. );
  7. CREATE TABLE student(
  8. id int PRIMARY KEY,
  9. name varchar(100),
  10. grade varchar(10)
  11. );
  12. \#定义关系表
  13. CREATE TABLE teacher\_student(
  14. t\_id int,
  15. s\_id int,
  16. PRIMARY KEY(t\_id,s\_id),
  17. CONSTRAINT t\_id\_fk FOREIGN KEY(t\_id) REFERENCES teacher(id),
  18. CONSTRAINT s\_id\_fk FOREIGN KEY(s\_id) REFERENCES student(id)
  19. );
  20. INSERT INTO teacher VALUES(1,‘WYJ‘,10000);
  21. INSERT INTO teacher VALUES(2,‘DH‘,10001);
  22. INSERT INTO student VALUES(1,‘WF‘,‘A‘);
  23. INSERT INTO student VALUES(2,‘QHS‘,‘A‘);
  24. INSERT INTO teacher\_student VALUES(1,1);
  25. INSERT INTO teacher\_student VALUES(1,2);
  26. INSERT INTO teacher\_student VALUES(2,1);
  27. INSERT INTO teacher\_student VALUES(2,2);

技术分享

  1. c、一对一(出现频率几乎没有)
  2. CREATE TABLE person(
  3. id int PRIMARY KEY,
  4. name varchar(100)
  5. );
  6. CREATE TABLE id\_card(
  7. id int PRIMARY KEY,
  8. num varchar(18),
  9. CONSTRAINT id\_fk FOREIGN KEY(id) REFERENCES person(id)
  10. );

技术分享

二、多表的查询

  1. 1、连接查询
  2. 基本语法:select XXX from t1 连接类型 t2 \[on 连接条件\]\[where 筛选条件\]
  3. 约定:t1在连接类型的左边,称之为左表 t2就是右表
  4. 连接类型:
  5. cross join:交叉连接
  6. inner join:显式内连接
  7. left outer join:左外连接
  8. right outer join:右外连接
  9. 1.1交叉连接(了解):cross join
  10. SELECT \* FROM customer CROSS JOIN orders;
  11. 返回的结果是:返回的是两张表结果的笛卡尔积。即表15条,表27条,返回的5\*7=35
  12. 1.2内连接:inner join(自然连接)
  13. a、隐式内连接:不使用on关键字(即不明确指定连接条件),使用的是where
  14. 查询有订单的客户的信息和订单信息
  15. SELECT \* FROM customer c,orders AS o WHERE c.id=o.customer\_id;
  16. b、显式内连接:使用on关键字
  17. 查询有订单的客户的信息和订单信息
  18. SELECT \* FROM customer c INNER JOIN orders o ON c.id=o.customer\_id;
  19. 查询订单金额在200元以上的客户的信息和订单信息
  20. SELECT \* FROM customer c INNER JOIN orders o ON c.id=o.customer\_id WHERE o.price>=200;
  21. 1.3外连接:outer join
  22. a、左外连接:返回满足连接条件的结果,同时返回左表中剩余的其他记录
  23. 查询客户信息,同时显示他的订单
  24. SELECT \* FROM customer c LEFT OUTER JOIN orders o ON c.id=o.customer\_id;
  25. 查询所有的员工,打印所在的部门名称
  26. SELECT \* FROM employee e LEFT OUTER JOIN department d ON e.depart\_id=d.id;
  27. b、右外连接:返回满足连接条件的结果,同时返回右表中剩余的其他记录
  28. 查询客户信息,同时显示他的订单
  29. SELECT \* FROM orders o RIGHT OUTER JOIN customer c ON c.id=o.customer\_id;
  30. 查询所有订单,同时显示他的客户信息
  31. SELECT \* FROM customer c RIGHT OUTER JOIN orders o ON c.id=o.customer\_id;
  32. 2、子查询(简单):
  33. 子查询:嵌套查询(内部语句)。一个查询语句是另外一个查询语句的条件。子查询的语句必须放在小括号之内
  34. select \* from t1 where id=(select id from t2);
  35. 查询id2的老师教过的学生姓名
  36. 方式一:多条语句
  37. select s\_id from teacher\_student where t\_id=2;
  38. select \* from student where id in (1,2);
  39. 方式二:连接查询
  40. select s.\* from teacher\_student ts,student s where ts.s\_id=s.id and ts.t\_id=2;
  41. 方式三:子查询(一个单列结果)
  42. select \* from student where id in (select s\_id from teacher\_student where t\_id=2);
  43. 查询名字为‘陈冠希‘的所有订单信息(子查询)
  44. select \* from orders where customer\_id=(select id from customer where name=‘陈冠希‘);
  45. 3、联合查询:UNION
  46. 联合查询能够合并两条查询语句的查询结果,去掉其中的重复数据行,然后返回没有重复数据行的查询结果。
  47. 取多条语句的并集(没有重复记录)
  48. 查询客户id=1并且订单金额>=200的订单信息
  49. SELECT \* from orders where price>=200 and customer\_id=1;
  50. 查询客户id=1或者订单金额>=200的订单信息
  51. SELECT \* from orders where price>=200 or customer\_id=1;
  52. 使用联合查询:查询客户id=1或者订单金额>=200的订单信息
  53. SELECT \* FROM orders WHERE price>=200 UNION SELECT \* FROM orders WHERE customer\_id=1;
  54. 4、报表查询(数据库的内置函数)
  55. 报表查询对数据行进行分组统计
  56. \[select \] from \[where\] \[ group by \[having \]\] \[ order by \]
  57. group by:按照那些字段进行分组
  58. having:对分组后的内容进行过滤(不能使用where
  59. 统计一个班级共有多少学生?
  60. mysql>SELECT count(\*) FROM student;
  61. 统计数学成绩大于90的学生有多少个?
  62. mysql>SELECT COUNT(\*) FROM student where math>90;
  63. 统计总分大于250的人数有多少?
  64. mysql>SELECT COUNT(\*) FROM student where (math+chinese+english)>250;
  65. 统计一个班级数学总成绩?
  66. mysql>SELECT SUM(math) FROM student;
  67. 统计一个班级语文、英语、数学各科的总成绩
  68. mysql>SELECT SUM(math),SUM(chinese),SUM(english) FROM student;
  69. 统计一个班级语文、英语、数学的成绩总和
  70. mysql>SELECT SUM(math+chinese+english) FROM student;
  71. 统计一个班级语文成绩平均分
  72. mysql>SELECT SUM(chinese)/COUNT(\*) FROM student;
  73. 求一个班级数学平均分?
  74. mysql>SELECT AVG(math) FROM student;
  75. 求一个班级总分平均分
  76. msyql>SELECT AVG(math+chinese+english) FROM student;
  77. 求班级语文最高分和最低分
  78. mysql>SELECT MAX(chinese) FROM student;
  79. mysql>SELECT MIN(chinese) FROM student;
  80. 注意:不能使用关键字作为表名或列名,如果必须使用,请使用反引号\`ESC按键下面)引起来
  81. 对订单表中商品归类后,显示每一类商品的总价
  82. mysql>SELECT product,sum(price) FROM orders GROUP BY product;
  83. 查询购买了几类商品,并且每类总价大于100的商品
  84. mysql>SELECT product,sum(price) FROM orders GROUP BY product HAVING sum(price)>100;

三、数据库的备份与恢复(MySQL)
1、备份数据库(表结构和表中数据)
c:/>mysqldump -h localhost -u root -p mydb1>d:/mydb1.sql

  1. 2、恢复数据库:数据库名必须手工创建,并选择
  2. 方式一:在MySQL内部导入数据
  3. mysql>create database mydb1;
  4. mysql>use mydb1;
  5. mysql>source d:/mydb1.sql;
  6. 方式二:不进入mysql进行数据的恢复
  7. c:/>mysql -u root -p mydb1<d:/mydb1.sql

原文地址:http://www.cnblogs.com/TerrySunShine/p/5785331.html

发表评论

表情:
评论列表 (有 0 条评论,505人围观)

还没有评论,来说两句吧...

相关阅读

    相关 mysql常见SQL语句

    1、需求 统计某个`子串`在`字符串`中`出现的次数`,`子串`在`字符串`中是否出现过。 2、案例 2.1 统计某个子串是否在字符串中出现过 my

    相关 Mysql常见操作语句

    一、数据完整性     1、实体完整性     2、域完整性(列完整性约束):         指数据库表的列(即字段)必须符合某种特定的数据类型或约束。