mysql distinct 多个字段_MySQL基础学习笔记

MySQL基础学习

1. 数据库相关概念

数据库是持久化数据的一种介质,可以理解成存储和管理数据的仓库。这里的持久化(persistence)指的是把数据保存到可掉电式存储设备中以供之后使用。

使用文件存储数据,查找不够方便;使用数据库管理数据可以:

  • 可将数据持久化到硬盘
  • 可存储大量数据
  • 方便检索
  • 保证数据的一致性和完整性
  • 安全,可共享(三层验证)
  • 通过组合分析,可以产生新数据。

常见的数据库产品有:Oracle、DB2、SQL Server、MySQL。

数据库中的相关概念有:

  • DB(数据库,database):存储数据的“仓库”。保存了一系列有组织的数据。(格式统一的数据)
  • DBMS(数据库管理系统),DB是由DBMS创建和操作的容器。
  • SQL(结构化查询语言),与数据库通信的语言。

数据库存储数据的特点:

  • 将数据放到表中,将表再放在库中,每个数据库有多个表,==表名具有唯一性==。
  • 表由列组成,称为==字段==,相当于“属性”;表中的数据是按行存储的,相当于==“对象”==

MySQL是一种开放源代码的关系型数据库管理系统。它的优点在于:

  • 成本低:开放源代码,一般可以免费试用
  • 性能高:执行快
  • 简单:容易安装使用

DBMS分为两类:

  • 一是基于共享文件系统的DBMS(Access)
  • 二是基于客户机——服务器的DBMS C/S(client/server),(MySQL、Oracle、SQL Server),要装服务端和客户端。

2. MySQL的使用

使用管理员权限的命令行启动/停止MySQL服务:

net start MySQL5.5
net stop MySQL5.5

使用命令行进行MySQL客户端登录:

mysql -h 主机名 -P 端口号 -u 用户名 -p密码
# 主机名 本地的话为localhost,端口号3306,用户名root,
# 连本地可以简略写为:
mysql -u root -p ...

MySQL命令要以;结尾。

MySQL常用命令

show databases; # 展示现有数据库 
use xx; # 使用xx数据库
show tables; //展示该数据库的表
show tables from xxx; # 展示xxx数据库的表,此时的位置还是xx数据库
select database(); # 查看当前所在的数据库

create table stuinfo( 
stuid int,
stuname varchar(20),
gender char,
borndata datetime); # 创建一个新的表,结构如上。

desc stuinfo; # 描述这个表stuinfo的结构。

select * from xx; # 从xx表中查询数据

insert into xx values(xxxxx); # 向xx中插入数据

update stuinfo set borndate='xxx' where stuid
 = 2; # 对于表stuinfo中,stuid = 2的数据,修改它的borndata字段为xxx

delete from stuinfo where stuid = 1; # 删除表中stuid为1的一行数据

drop table xx; # 删除xx表

SQL语法注意事项:

  • SQL语句中不区分大小写,建议库名,表名,字段名大写
  • 注释写法,单行注释#和-- ,多行注释/ /

3. DQL语句

SQL有几种:

  • DDL(数据定义语言,定义数据库对象:库、表、列等)、create/drop/alter
  • DML(数据操作语言,定义数据库记录,即数据)insert/update/delete
  • DCL(数据控制语言,定义访问权限和安全级别)、
  • DQL(数据查询语言,用来查询数据记录)、select

3.1 基础查询

select 查询列表 from 表名;

查询到的结果集是一个虚拟表,不是真实存在的一个表。select后面的查询列表,可以由多个部分组成,中间用逗号隔开。比如:

select 字段1,字段2,表达式 from 表名;
select first_name from employees; # 先进行from,看看是否能找到这个表,然后再找first_name
select 100; #查询常量
select 100%3; #查询表达式
select first_name,last_name from employees; #查询多个字段
select * from employees; #查询所有字段
select database(); 
select version(); #查询函数(调用函数,获取返回值)
select user() as xxx; #对user起别名为xxx,xxx可以用引号引起来
# 上面的as可以换成空格。


select first_name + last_name as "姓 名" from employees;
/*
  mysql中的加号+只有加法作用:
  1.两个操作数为数值型,正常加
  2.当其中一个为字符型的时候,会强制转换为数值型,如果无法转换,则直接当做0
  3.其中一个操作数为null,结果为null
  因此上面的操作无法进行,将两个字段的数据组合,使用拼接函数concat
  需要注意,concat的时候,如果其中一个为null,那么最后的结果也会变成null
  需要使用ifnull函数判断
*/
select concat(first_name,last_name) as "姓 名" from employees;


# distinct 的使用
select distinct department_id from employees;
# 加上distinct关键字,查询的是去重之后的数据

# desc查看表的结构
desc employees;
# 也可以使用
show columns from employees;

#ifnull函数,a可以是字段、表达式......
ifnull(a,xx) #如果a是null,返回xx,否则正常返回a

查询的列表可以是:字段、表达式、常量、函数等。

当命令特别长的时候,使用F12可以自动换行对齐。

3.2 条件查询

根据条件过滤来查询语句。

语法:

select xxx from xxxx where 条件;
SELECT * FROM employees WHERE salary >= 12000;

执行顺序是,先查询from,找到表,然后对虚拟的结果表进行where筛选,最后进行select。

在where语句中,有如下关系运算符及关键字:

  • >、<、>=、<=、=(只需要一个)、<>(不等于,写!=也行)。
  • AND、OR、NOT。
  • BETWEEN...AN

你可能感兴趣的:(mysql,distinct,多个字段,mysql,distinct多个字段,mysql,两个字段去重,mysql,字段拼接,mysql,根据两个字段去重,mysql,设置某个字段等于某个字段)