MySQL学习:(1)基本概念 + 基本操作语句

基本概念

数据库 database:保存有组织的(结构化的)数据的容器(通常是一个文件或者一组文件)

  • 数据库系统 database management system:用来访问数据库的管理系统,缩写(DBMS) ;最具有代表性的 DBMS 是 MYSQL
  • 表 table:某种特定类型数据的结构化清单;同一个数据库中的表应该具有唯一的名字(唯一性),不同的数据库中可以出现相同的表名
  • 模式 schema:数据库和表的布局及特性信息
  • 列 column:表中的一个字段,一个表是有一个或者多个列组成的
  • 行 row:表中的数据按行存储,一行也可以叫做一个记录
  • 主键 primary key:主键也是以一列(或一组列)的形式存在,它能够唯一区分表中的每个行;通过索引主键,可以得到表中任意的一行
    • 表中的任何列都可以作为主键,只要满足下列的条件:
      1)任意两行不具有相同的主键值(唯一性)
      2)每个行都必须有一个主键值(主键列不允许存在NULL 值)
    • 当多个列组合起来作为主键列的时候,主键列中的单个列的值可以不唯一,但是所有列值的组合必须是唯一存在的
  • 数据库语言:SQL(sequel) 不是某个 DBMS 的专利语言,而是通用于几乎所有的数据库管理系统;但是不同的数据库管理系统使用的 SQL 的语法规定略微不同,但大同小异,具有移植性,但不完全一样;我们主要学习 MySQL
  • DBMS 主要分两种:
    1)基于共享文件系统的 DBMS
    2)基于客户机-服务器的 DBMS

基本操作语句

注意每句话后面要加分号

SHOW 语句

  • 展示数据库:SHOW DATABASES;
  • 选用数据库:USE sakila;
  • 展示数据库中的所有表:SHOW TABLES
  • 选择其中名为 actor 的表并展示所有列的信息:SHOW COLUMNS FROM actor;这种方法可以直接被以下语句替代:DESCRIBE actor 得到的也是相同的信息
    在这里插入图片描述
    但是通过这种方式只能获得所有列的名字,而不能获得所有列中的具体内容

SELECT 基本检索语句

  • 展示一个表中所有列的具体内容:SELECT * FROM actor;
    在这里插入图片描述

  • 限定选定的行的个数:SELECT * FROM actor LIMIT 5; 选择前五行(1~5行,sql 规定第一行的索引是 1 不是 0)
    在这里插入图片描述

  • 选定从任意一行开始的任意长度的行:SELECT * FROM actor LIMIT 5,5; (6~10 行,即从第5 行开始(但不包括第五行)往后的 5 行)
    在这里插入图片描述

  • 检索单个列:SELECT first_name FROM actor

  • 检索多个列:SELECT first_name, last_name FROM actor

  • 完全限定的写法:SELECT actor.first_name FROM sakila.actor 直接通过关键字和 . 把数据库名称、表名称、列名称全部建立关系,从而实现对列的检索;当然也可以用这种方式来索引多个列:SELECT actor.first_name, actor.last_name FROM sakila.actor 中间用逗号连接即可

SELECT FROM … ORDER BY 排序检索语句

  • 按照某一列进行排序检索:SELECT * FROM actor ORDER BY first_name;
    在这里插入图片描述

  • 按照多列进行排序检索:SELECT * FROM actor ORDER BY first_name,last_name; 先按照第一个列进行排列,如果这样排列时有相同值的项,则按照第二个列的标准进行排列

  • 按照某一列进行逆序排列:SELECT * FROM actor ORDER BY first_name DESC;
    在这里插入图片描述

  • 首先按照某一列的逆序排列,重复的部分按照另外一列的方式进行排列:SELECT * FROM actor ORDER BY first_name DESC, last_name;

  • 按照多个列的逆序进行排列:SELECT * FROM actor ORDER BY first_name DESC, last_name DESC; 每一个逆序的列都要在后面加 DESC

  • 结合 limit 和 order by 来选出最大的数值对应的行:use sakila; select * from payment order by amount desc, staff_id limit 1;
    在这里插入图片描述

    • payment 是 sakila 里的表名
    • amount 是 payment 中的一列,staff_id 是另外一列
    • limit 1 选出符合条件的第一个行
    • 以上的指令还可以更加简化为:select * from sakila.payment order by amount desc, staff_id limit 1;,直接通过 sakila.payment 把 sakila 数据库选项也加载到指令中
  • order by 子句必须处于 from 之后,limit 必须处于 order by 之后

WHERE 过滤语句

在这组例子中,我们使用 payment 这个表,这个表来自于 sakila 数据库。这个表的整体结构如下:

  • select * from sakila.payment;
    在这里插入图片描述

  • 通过 amount 来抽取指定的两列数据中 amount > 10 的条目:select payment_id, amount from sakila.payment where amount >10 ;
    在这里插入图片描述

  • 通过 amount 来抽取指定的两列数据中 amount > 10 的条目,并把这些条目按照 payment 的降序进行排列:select payment_id, amount from sakila.payment where amount>10 order by payment_id desc;
    在这里插入图片描述

  • where 子句的使用放在 order by 之前

  • where 子句的操作符:=, >, <>, !=, <, <=, >=, between

  • where 子句操作符实例演练:

    select payment_id, amount from sakila.payment where amount < 10;
    select payment_id, amount from sakila.payment where amount != 10;
    select payment_id, amount from sakila.payment where amount between 5 and 10;
    select payment_id, amount from sakila.payment where amount >= 10;
    

    在这里插入图片描述

  • where 子句的 is null 判断:

    select payment_id, amount from sakila.payment where amount is not null;
    select payment_id, amount from sakila.payment where amount is null;
    

    在这里插入图片描述
    结果表明在这个表中,不存在 null 的值,因此,返回结果为空

AND OR IN NOT 结合 WHERE 多级过滤语句

  • 多个 where 条件的筛选:select payment_id, amount from sakila.payment where amount < 10 and payment_id between 100 and 120;
    在这里插入图片描述

  • 通过括号来约束多个 and 和 or 同时出现的过滤条件:select payment_id, amount from sakila.payment where (amount =0.99 or amount = 6.99) and (payment_id between 100 and 120);
    在这里插入图片描述

    • 当条件中出现了多个 and 和 or 的时候,这个时候按照自己的意思通过 () 进行约束是非常有必要的,避免歧义的。
  • 使用 in 来代替多个 or 的过滤情况: select payment_id, amount from sakila.payment where amount in (0.99,6.99) and (payment_id between 100 and 120);
    在这里插入图片描述

    • 通过 in 语句,可以起到 or 的效果,而且往往更容易理解和直观
  • NOT 语句可以与 IS, BETWEEN, EXIST 子句联合在一起进行取反

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

暖仔会飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值