• mysql基础命令2


    FDML: 数据操作语

    insert(插入数据)

    特殊字符要加引号,不然数据全为0 如时间:0000-00-00 00:00:00

    #查看表结构
    desc student;
    #插入数据(多列)(少一列数指定都会报错)
    insert into student values(1,'ss',33,'f','3333-4-5');
    ###插入数据(多列)(指定列)
    insert student(name,age) values('zeng','84');
    
    #插入多条数据(指定列)(不指定的话默认或null)
    insert student(name,age) values('zeng','84'),('a','4'),('b','8');
    
    #查看
    select * from student;
    
    #into可以省略
    #前面指定的话,后面一定要加
    #非空不自增的一定要指定
    #sql_mode与表的严格程度有关
    [root@db03 ~]# vim /etc/my.cnf
    sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
    

    update命令

    使用update语句,一定要加where

    #查看数据
    mysql> select * from student;
    #修改数据(小心指定的值不是唯一 非空)
    update student set age=18 where name='ss' and cometime='';
    #修改指定数据(有主键就指定主键)
    update student set age=18 where id=2;
    #查看
    mysql> select count(*) from student1;
    mysql> select * from student;
    
    

    delete 删除数据,不会删除表

    #查看数据
    select count(*) from student;
    select * from student;
    #删除数据(使用delete语句也一定要加where条件),最好不要批量删除表,要一个一个删除
    delete from student where id=1;
    
    #删除表(通过bin-log可以找回来)(可以通过where指定某一行)(不会删除索引)
    delete from student (where 1=1);
    #删除表(找不回来)(不会触发任何触发器)(不会删除表)
    truncate (table) student;
    #删除表(找不回来)
    drop table student;
    

    使用update代替delete

    老玩家回归

    1.添加状态字段status
    alter table student add status enum('1','0') default 1;
    2.使用update代替delete
    #删除数据
    delete from student where id=1;
    #修改数据
    update student set status='0' where id=1;
    #查看表
    select * from student;
    desc student;
    
    #status的值要加引号
    status='0'
    

    DQL: 数据查询语言

    select

    1.查询表中所有的数据
    #查看数据总行数
    select count(*) from student;
    #该语句只适合数据量小的表,因为这些数据放到了内存查看
    select * from student;
    2.查看指定列的数据
    查看表结构
    desc student;
    #查看指定列
    select user,host from mysql.user;
    3.按条件查询#where
    select name,gender from student where id='1';
    
    #select查看表的时候一定要先看一下数据的数量,防止沾满内存
    #id='1',无论该字段在不在要查看的字段内,都可以where
    #字段不用加引号,值要加引号
    #SQL语句,数据库名 表名 字段名 数据名 是否支持大小写,要看字符集的校验规则
    #select user,host select后面是要查看要显示的列
    

    查询练习

    #上传SQL文件
    [root@db03 ~]# rz -E
    rz waiting to receive.
    [root@db03 ~]# ll
    total 396
    -rw-r--r-- 1 root root 397334 Jul 15 10:21 world.sql
    #查看slq文件是否有drop
    [root@db03 ~]# grep -ri drop world.sql 
    DROP SCHEMA IF EXISTS world;
    DROP TABLE IF EXISTS `city`;
    DROP TABLE IF EXISTS `country`;
    DROP TABLE IF EXISTS `countrylanguage`;
    #删除drop语句
    
    #导入
    方法1
    [root@db03 ~]# mysql -uroot -p123 < world.sql
    方法2(有过程)(SQL语句)
    mysql> source /root/world.sql
    方法3
    mysql> . /root/word.sql
    
    #连接
    [root@db03 ~]# mysql -uroot -p123 
    mysql> show databases;
    mysql> use world
    mysql> show tables;
    #查看表结构(表头)
    mysql> desc city;
    
    #查看表行数
    select count(*) from city;
    +----------+
    | count(*) |
    +----------+
    |     4079 |
    +----------+
    #查看表
    select * from city;
    | ID   | Name| CountryCode | District| Population |
    select Name,Population from city;
    
    #查看数据排序(order by)
    升序
    mysql> select Name,Population from city order by Population;
    降序
    mysql> select Name,Population from city order by Population desc;
    
    #查看前十条数据(limit N)
    mysql> select population from city order by population limit 10;
    mysql> select Name,Population from city order by Population desc limit 10;
    #按照步长查询数据,起始,步长(n+1--N)(#翻页)
    select Name,Population from city order by xx desc limit 10,50;
    select id,Name,Population from city order by xx desc limit 10,50;
    
    #命令行查看(脚本使用)
    mysql -uroot -p123 -e 'use world;select id,name from city limit 0,100'
    mysql -uroot -p123 -e 'select * from world.city'
    

    条件查询

    #条件查询就是使用where语句
    where可以使用的符号:(字段和数值之间的符号)
    	#精确匹配
    	=
    	
    	#范围匹配(int tinyint)
    	!=
    	>
    	<
    	>=
    	<=
    	
    	#条件语句
    	or
    	and
    	
    	#模糊匹配,会导致数据的查询非常缓慢
    	like 		
    
    #2.查询中国的城市人口
    mysql> select name,population from city where CountryCode='CHN';
    
    #3.查询黑龙江人口数量
    mysql> select name,population from city where countrycode='CHN' and District='heilongjiang';
    
    #4.查询中国人口数量小于100000的城市
    mysql> select name,population from city where countrycode='CHN' and population < 100000;
    
    #5.模糊匹配(值:like %)(like速度慢)
    #匹配以N结尾的数据
    mysql> select name,countrycode from city where countrycode like '%N';
    #匹配以N开头的数据
    mysql> select name,countrycode from city where countrycode like 'N%';
    #匹配包含N的数据
    mysql> select name,countrycode from city where countrycode like '%N%';
    
    #6.查询中国或美国的人口数量
    #使用 ...or...
    mysql> select name,population from city where countrycode = 'CHN' or countrycode = 'USA';
    #使用in(...)
    mysql> select name,population from city where countrycode in ('CHN','USA');
    #使用(select ...union all ...select ...)(查询速度最快)
    mysql> select name,population from city where countrycode = 'CHN' union all select name,population from city where countrycode = 'USA';
    

    select高级用法

    #多表联查,联表查询
    	多表联查的意义就在于把不同表的列组合成一个表,显示出来,关键在于'联'(where),
    	
    
    1.传统连接,#联表,字段可以不同,指定列值必须相同
    
    2.自连接,#自己查找相同字段,使用自连接两个表必须有相同字段和相同的值
    
    3.内连接
    
    4.外连接
    

    传统连接

    #建表
    mysql> create table students(id int,name varchar(10));
    mysql> create table score(id int,mark int);
    #插入数据
    mysql> insert into students values(1,'qiudao'),(2,'qiandao'),(3,'zengdao');
    mysql> insert into score values(1,80),(2,90),(3,100);
    #数据查询
    mysql> select * from students;
    mysql> select * from score;
    ------------------------------------ 2表联查
    #查看邱导的分数
    mysql> select students.name,score.mark from students,score where students.id=score.id and name='qiudao';
    #查询所有学生成绩
    mysql> select students.name,score.mark from students,score where students.id=score.id
    

    练习题1

    连2表查询:世界上小于100人的城市在哪个国家?请列出城市名字,国家名字与人口数量

    #1.确认我要查哪些内容
    国家名字  城市名字  城市人口数量   小于100人
    
    #2.确认在哪个表
    country.name   city.name   city.population   
    
    #3.找出两个表相关联的字段
    city.countrycode   country.code
    
    #4.编写语句
    desc xx;
    mysql> select country.name,city.name,city.population from country,city where city.countrycode=country.code and city.population < 100;
    +----------+-----------+------------+
    | name     | name      | population |
    +----------+-----------+------------+
    | Pitcairn | Adamstown |         42 |
    +----------+-----------+------------+
    
    

    练习题2

    连3表查询:世界上小于100人的城市在哪个国家,是用什么语言?请列出城市名字,国家名字与人口数量和国家语言

    #1.确认我要查哪些内容
    国家名字  城市名字  城市人口数量   国家使用的语言   小于100人
    
    #2.确认在哪个表
    country.name   city.name   city.population   countrylanguage.language
    
    #3.找出三个表相关联的字段
    country.code   city.countrycode   countrylanguage.countrycode
    
    #4.写sql语句(and两两分开联)
    desc xx;
    mysql> select country.name,city.name,city.population,countrylanguage.language from country,city,countrylanguage where country.code=city.countrycode and city.countrycode=countrylanguage.countrycode and city.population < 100;
    +----------+-----------+------------+-------------+
    | name     | name      | population | language    |
    +----------+-----------+------------+-------------+
    | Pitcairn | Adamstown |         42 | Pitcairnese |
    +----------+-----------+------------+-------------+
    
    #多联表查询
    1.要看哪些表,哪些列
    2.找出关联字段
    select 表1.列,表2.列,表3.列... from 表1,表2,表3... where 表1.列a=表2.列b and 表2.列b=表3.列c... and 表xx.列xx < 100;
    
    #city.population 或者population 可以指定表,也可以不指定(默认是当前表)
    

    自连接(natural join)

    自连接会自己查找相同字段

    适用于2表联查

    #两个关联的表必须有相同字段和相同数据
    mysql> select city.name,city.countrycode,countrylanguage.language,city.population from city natural join countrylanguage where population < 100 order by population;
    
    #两个表中 指定的字段和数据列 必须相同 (缺一不可)
    mysql> select country.name,city.name,city.population from city natural join country where population < 100;
    这两个表中虽然都有Name列,但是数值不一样,所以#SQL语句错误,但是不报错
    #查看列
    mysql> desc city;
    | Name
    mysql> desc country;
    | Name
    #查看值
    select * from city limit 10;
    select * from city limit 10;
    
    
    #注意:
    1.自连接必须有相同字段和相同值(指定列相同)
    2.小表命中大表(selec count(*))
    3.NATURAL JOIN 自连接
    4.可以自连接就可以传统连接
    
    mysql> select 表1.列1,表2.列2... from 表1 natural join 表2 where 列x < 100;
    

    内连接

    关联数据相同即可

    适用于2表联查,3表联查

    #注意:命中率(驱动的概念),小表在join前
    	表1 小表
    	表2 大表
    
    #2表联查
    #小于100人的城市在哪个国家,国家代码是什么?
    select city.name,city.population,city.countrycode,country.name 
    from city join country on city.countrycode=country.code 
    where city.population < 100;
    
    #3表联查
    #世界上小于100人的城市在哪个国家?是用什么语言?
    select country.name,city.name,city.population,countrylanguage.language
    from city join country on city.countrycode=country.code 
    join countrylanguage on country.code=countrylanguage.countrycode
    where city.population < 100;
    
    select 表1.列1,表2.列2... from 表1 join 表2 on 表1.a=表2.b... where 表x.列x < 100;
    

    外连接

    外连接基于内连接,使用了......left (right) join ...... on...

    外连接可以做脱敏

    and不能替换为where

    #左外连接
    select city.name,city.countrycode,country.name
    from city left join country on city.countrycode=country.code and city.population < 100;
    +------------------------------------+-------------+----------+
    | name                               | countrycode | name     |
    +------------------------------------+-------------+----------+
    | Kabul                              | AFG         | NULL     |
    
    #右外连接
    select city.name,city.countrycode,country.name,city.population
    from city right join country on city.countrycode=country.code and city.population < 100;
    +-----------+-------------+----------------------------------------------+
    | name      | countrycode | name                                         |
    +-----------+-------------+----------------------------------------------+
    | NULL      | NULL        | Aruba                                        |
    
    
  • 相关阅读:
    标题栏外区域拖动窗体
    搜索引擎技术核心揭密
    用C#实现木马程序(转载)
    DotNet里的控件数组
    RECORDNUMBER应用之控制每页显示行数及隔行换色
    搜索引擎技术学习
    VB里面操作Excel(居然比C#强)
    第三代搜索引擎技术与P2P
    C# 用API播放声音
    如何判断ExecuteScalar()得到的结果是否有记录
  • 原文地址:https://www.cnblogs.com/syy1757528181/p/13357514.html
Copyright © 2020-2023  润新知