数据库和表的增删改

创建数据库

CREATE  DATABASE 数据库名;

# mysql中还可使用如下语句
CREATE SCHEMA 数据库名;

数据库选择

USE 数据库名;

创建表

create table students
(
id int unsigned not null auto_increment primary key,
name char(8) not null,
sex char(4) not null,
age tinyint unsigned not null,
tel char(13) null default "-"
);

重命名表名

RENAME TABLE 旧表名 TO 新表名;

删除数据库和表

DROP DATABASE 数据库名;
DROP TABLE 表名;

插入和更新数据

使用INSERT插入行

INSERT INTO Customer
VALUES(NULL,
'100 Main Street',
'Los Angles',
'CA');

插入一个新客户到customers表。存储到每个表列中的数据在VALUES子句中给出,对每个列必须提供一个值。虽然这种语法很简单,但并不安全,应该尽量避免使用。

更安全的写法:

INSERT INTO Customer(cust_name,
cust_address,
cust_city,
cust_state)
VALUES('Pep E',
'100 Main Street',
'Los Angeles',
'CA');

这种写法即使表的结构改变,此INSERT语句仍然能正确工作。

使用UPDATA更新数据

UPDATA Customers
SET cust_email = 'elmer@fudd.com'
WHERE cust id = 10005;

使用IGNORE忽略错误

如果用UPDATE语句更新多行,并且在更新这些行中的一行或多行时出一个现错误,则整个UPDATE操作被取消。为即使是发生错误,也继续进行更新,可使用IGNORE关键字:

UPDATE IGNORE customers...

使用DELETE删除数据

WHERE FROM customers
WHERE cust_id = 10006;

如果想从表中删除所有行,不要使用DELETE。可使用TRUNCATE TABLE语句,它完成相同的工作,但速度更快(TRUNCATE实际是删除原来的表并重新创建一个表,而不是逐行删除表中的数据)。

表的查询

查询列

SELECT 列名 FROM 表名;

查询列中不重复项DISTINCT

SELECT DISTINCT 列名 FROM 表名;

限制结果数量LIMIT

SELECT 列名 FROM 表名 LIMIT 数量;

排序结果

SELECT 列名 FROM 表名 ORDER BY 一个或多个列的名字;

默认为升序排列, 若要降序排序, 通过DESC可指定降序排序.

SELECT 列名 FROM 表名 ORDER BY 一个或多个列的名字 DESC;

过滤结果

SELECT 列名 FROM 表名 WHERE 条件;

//使用LIKE来匹配通配符
SELECT 列名 FROM 表名 WHERE 列名 LIKE 条件; //使用REGEXP来使用正则表达式
SELECT 列名 FROM 表名 WHERE 列名 REGEXP 条件;

SQL的不等于通过'<>'来表示, 判断NULL通过IS NULL来表示, BETWEEN .. AND ..或者IN (.., ..)表示范围.

多个条件组合时, AND比OR的优先级要高.

MySQL中正则表达式不区分大小写, 若要区分大小写, 可用REGEXP BINARY.

组合查询

利用UNION,组合数条SQL查询结果作为单个查询结果集返回。这些组合查询通常称为并或复合查询.

SELECT vend_id, prod_id, prod_price
FROM products
WHERE prod_price <=5
UNION
SELECT vend_id, prod_id, prod_price
FROM products
WHERE vend_id IN (1001, 1002);

拼接

Concat函数实现拼接

SELECT Concat (列名1, '(', 列名2, ')') FROM 表名 WHERE 条件;

多数DBMS通过+或||来实现拼接, MySQL通过Concat()函数来实现.

命名列的别名

SELECT Concat (列名1, '(', 列名2, ')') AS 新列名 FROM 表名 WHERE 条件;

通过AS关键字, 讲拼接后的列命名一个别名.

子查询

SELECT cust_id
FROM orders
WHERE order_num IN (SELECT order_num
FROM orderitems
where prod_id = 'TNT2');

使用IN来进行子查询

SELECT cust_name,
cust_state,
(SELECT COUNT(*)
FROM orders
WHERE orders.cust_id = custom.cust_id) AS orders
FROM customers
ORDER BY cust name;

函数

文本函数

  • Upper() 文本转换为大写
  • Soundex() 寻找读音相近的数据
  • Trim() 删除多余的空格
  • RTrim() 删除右侧多余的空格
  • LTrim() 删除左侧多余的空格

日期及时间处理函数

数值处理函数

聚集函数



可在函数中以DISTINCT来仅汇总不同的值

SELECT AVG(DISTINCT prod_price) AS avg_price
FROM products
WHERE vend_id = 1003;

分组

在SELECT语句的GROUP BY子句中建立分组

SELECT vend_id, COUNT(*) AS num_prods
FROM products
GROUP BY vend_id;

通过HAVING来在分组中过滤数据

SELECT cust_id, COUNT(*) AS orders
FROM orders
GROUP BY cust_id
HAVING COUNT(*) >= 2;

分组使用的注意事项

  • GROUP BY子句可以包含任意数目的列。这使得能对分组进行嵌套,为数据分组提供更细致的控制
  • 在建立分组时,指定的所有列都一起计算
  • GROUP BY子句中列出的每个列都必须是检索列或有效的表达式(但不能是聚集函数), 如果在SELECT中使用表达式,则必须在GROUP BY子句中指定相同的表达式, 不能使用别名
  • 除聚集计算语句外, SELECT语句中的每个列都必须在GROUP BY子句中给出
  • 如果分组列中具有NULL值,则NULL将作为一个分组返回。如果列中有多行NULL值,它们将分为一组
  • GROUP BY子句必须出现在WHERE子句之后, ORDER BY子句之前
  • 一般在使用GROUP BY子句时,应该也给出ORDER BY子句。这是保证数据正确排序的唯一方法

联结

使用WHERE创建等值联结

SELECT vend_name, prod_name, prod_price
FROM vendors, products
WHERE vendors.vend_id = products.vend_id
ORDER BY vend_name, prod_name;

使用INNER JOIN创建等值联结

SELECT vend_name, prod_name, prod_price
FROM vendors INNER JOIN products
ON vendors.vend_id = products.vend_id;

联结多个表

SELECT vend_name, prod_name, prod_price
FROM vendors, products
WHERE vendors.vend_id = products.vend_id
AND orderitems.prod_id = products.prod_id;

自联结

自联结通常作为外部语句用来替代从相同表中检索数据时使用的子查询语句。虽然最终的结果是相同的,但有时候处理联结远比处理子查询快得多。

SELECT p1.prod_id, p1.prod_name
FROM products AS p1, producrs AS p2
WHERE p1.vend_id = p2.vend_id
AND p2.prod_id = 'DTNTR'; //等价于
SELECT prod_id, prod_name
FROM products
WHERE vend_id = (SELECT vend_id FROM products
WHERE prod_id = 'DTNTR');

自然联结

无论何时对表进行联结,应该至少有一个列出现在不止一个表中(被联结的列)。标准的联结返回所有数据,甚至相同的列多次出现。 自然联结排除多次出现,使每个列只返回一次。

//通配符只对第一个表使用。所有其他列明确列出,所以没有重复的列被检索出来
SELECT c.*, o.order_num, o.order_date, oi.prod_id, oi.quantity, OI.price
FROM customers AS c, orders AS o, orderitem AS oi
WHERE c.cust_id = o.cust_id
AND oi.order_num = o.order_num
AND prod_id = 'FB';

外部联结

许多联结将一个表中的行与另一个表中的行相关联。但有时候会需要包含没有关联行的那些行。例如,可能需要使用联结来完成以下工作:

  • 对每个客户下了多少订单进行计数,包括那些至今尚未下订单的客户
  • 列出所有产品以及订购数量,包括没有人订购的产品
SELECT customers.cust_id, orders.order_num
FROM custormers, INNER JOIN orders
ON customers.cust_id = order.cust_id;

MySQL不支持简化字符=和=的使用,这两种操作符在其他DBMS中是很流行的。

MySQL必知必会笔记的更多相关文章

  1. 《mysql必知必会》读书笔记--存储过程的使用

    以前对mysql的认识与应用只是停留在增删改查的阶段,最近正好在学习mysql相关内容,看了一本书叫做<MySQL必知必会>,看了之后对MySQL的高级用法有了一定的了解.以下内容只当读书 ...

  2. MySQL必知必会(第4版)整理笔记

    参考书籍: BookName:<SQL必知必会(第4版)> BookName:<Mysql必知必会(第4版)> Author: Ben Forta 说明:本书学习笔记 1.了解 ...

  3. MySQL必知必会1-20章读书笔记

    MySQL备忘 目录 目录 使用MySQL 检索数据 排序检索数据 过滤数据 数据过滤 用通配符进行过滤 用正则表达式进行搜索 创建计算字段 使用数据处理函数 数值处理函数 汇总数据 分组数据 使用子 ...

  4. 《MySQL必知必会》学习笔记整理

    简介 此笔记只包含<MySQL必知必会>中部分章节的整理笔记.这部分章节主要是一些在<SQL必知必会>中并未讲解的独属于 MySQL 数据库的一些特性,如正则表达式.全文本搜索 ...

  5. MySQL必知必会复习笔记(1)

    MySQL必知必会笔记(一) MySQL必知必会是一本很优秀的MySQL教程书,并且相当精简,在日常中甚至能当成一本工作手册来查看.本系列笔记记录的是:1.自己记得不够牢的代码:2.自己觉得很重要的代 ...

  6. MySQL使用和操作总结(《MySQL必知必会》读书笔记)

    简介 MySQL是一种DBMS,即它是一种数据库软件.DBMS可分为两类:一类是基于共享文件系统的DBMS,另一类是基于客户机——服务器的DBMS.前者用于桌面用途,通常不用于高端或更关键应用. My ...

  7. 读《MySql必知必会》笔记

    MySql必知必会 2017-12-21 意义:记录个人不注意的,或不明确的,或不知道的细节方法技巧,此书250页 登陆: mysql -u root-p -h myserver -P 9999 SH ...

  8. 《MySQL必知必会》学习笔记——前言

    前言 MySQL已经成为世界上最受欢迎的数据库管理系统之一.无论是用在小型开发项目上,还是用来构建那些声名显赫的网站,MySQL都证明了自己是个稳定.可靠.快速.可信的系统,足以胜任任何数据存储业务的 ...

  9. 读书笔记汇总 - SQL必知必会(第4版)

    本系列记录并分享学习SQL的过程,主要内容为SQL的基础概念及练习过程. 书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL i ...

  10. mysql必知必会系列(一)

    mysql必知必会系列是本人在读<mysql必知必会>中的笔记,方便自己以后查看. MySQL. Oracle以及Microsoft SQL Server等数据库是基于客户机-服务器的数据 ...

随机推荐

  1. 移动端自适应rem 布局篇

    相信很多刚开始写移动端页面的同学都要面对页面自适应的问题,当然解决方案很多,比如:百分比布局,弹性布局flex(什么是flex),也都能获得不错的效果,这里主要介绍的是本人在实践中用的最顺手最简单的布 ...

  2. 一步一步搞懂支持向量机——从牧场物语到SVM(上)

    之前在数据挖掘课程上写了篇关于SVM的"科普文",尽量通俗地介绍了SVM的原理和对各公式的理解.最近给正在初学机器学习的小白室友看了一遍,他觉得"很好,看得很舒服&quo ...

  3. .net 分布式的未来:微服务

    一.背景&问题 之前框架是一个基于SOA思想设计的分布式框架.各应用通过服务方式提供使用,服务之间通信是RPC方式调用,具体实现基于.NET的WCF通信平台.框架存在如下2个问题: 1.高并发 ...

  4. 鼠标相关操作(Cursor类及相关API)

    Cursor.visible:属性,显示或者隐藏鼠标.  Cursor.lockState = CursorLockMode.Locked:锁定鼠标到游戏窗口的中心. (CursorLockMode: ...

  5. Less 原理

    Less 原理 Less 包含一套自定义的语法及一个解析器,用户根据这些语法定义自己的样式规则,这些规则最终会通过解析器,编译生成对应的 CSS 文件. Less 并没有裁剪 CSS 原有的特性,更不 ...

  6. linux 挂在win下文件

    使用mount命令 #mount -t cifs -o username=abc,password=1234 //192.168.1.10/linux /mnt/linux #mount -t cif ...

  7. 【转】如何使用Git上传本地项目到github?(mac版)

    原文链接:http://www.cnblogs.com/lijiayi/p/pushtogithub.html 在此假设你已经在 github 上创建好了一个项目,像这样: 并且你已经完成了自己的项目 ...

  8. react入门到进阶(三)

    一.react样式 1.内联样式 在以前写html+css的时候,引入css的时候有一种方法就是内联,而在react中又有些不一样,样式是用变量的形式,如下 const styleComponentH ...

  9. Angular自定义组件实现数据双向数据绑定

    学过Angular的同学都知道,输入框通过[(ngModel)]实现双向数据绑定,那么自定义组件能不能实现双向数据绑定呢?答案是肯定的. Angular中,我们常常需要通过方括号[]和圆括号()实现组 ...

  10. hdu 1150 Machine Schedule 最小覆盖点集

    题意:x,y两台机器各在一边,分别有模式x0 x1 x2 ... xn, y0 y1 y2 ... ym, 现在对给定K个任务,每个任务可以用xi模式或者yj模式完成,同时变换一次模式需要重新启动一次 ...