使用DQL查询数据 ~ ~刚需

    技术2022-07-11  90

    #该表类型(存储引擎)InnoDB CREATE TABLE test( id INT(4) PRIMARY KEY AUTO_INCREMENT, coll VARCHAR(20) NOT NULL );

    #往表里插入数据 INSERT INTO test(coll) VALUES(‘row1’),(‘row2’),(‘row3’);

    #删除表数据(不带where条件的delete) #自增当前值依然从原来基础上进行 DELETE FROM test;

    #删除表全部数据(truncate) #自增值恢复到初始值重新开始 TRUNCATE TABLE test;

    #创建俩个表,分比为innoDB类型,MyISAM类型

    CREATE TABLE tab1( id INT(4) PRIMARY KEY AUTO_INCREMENT, coll VARCHAR(20) NOT NULL

    )ENGINE=INNODB;

    INSERT INTO tab1(coll) VALUES(‘row1’),(‘row2’),(‘row3’);

    CREATE TABLE tab2( id INT(4) PRIMARY KEY AUTO_INCREMENT, coll VARCHAR(20) NOT NULL

    )ENGINE=MYISAM;

    INSERT INTO tab2(coll) VALUES(‘row1’),(‘row2’),(‘row3’);

    #清空表数据 DELETE FROM tab1; DELETE FROM tab2;

    #表数据清空之后 id在插入就是从4开始

    #重启数据库服务后tab1:id是从1开始 #重启数据库服务后tab2:id是从4开始

    #同样适用detale from 清空表数据,重启数据库服务后,对于INNODB的表,自增列从初始值重新开始 #而MYISAM类型的表,自增列依然从上一个自增数据基础开始

    #启动数据库服务 net start mysql #停止数据库服务 net stop mysql

    #查询表( * 所有列,效率低) SELECT * FROM tab1; SELECT * FROM student;

    查询 指定列(学号 姓名)

    #(不影响原表原数据 ,只是给顾客方便看 ) SELECT studentno,studentname FROM student;

    #为列取别名( AS 是可以省略 ) SELECT studentno AS 学号,studentname AS 姓名 FROM student;

    SELECT studentno 学号,studentname 姓名 FROM student;

    #使用AS也可以为 表 取别名( AS 是可以省略 ) SELECT studentno AS 学号,studentname AS 姓名 FROM student AS s;

    SELECT studentno 学号,studentname 姓名 FROM student s; #连接时用处比较大

    #使用AS ,微查询结果取一个新名字 SELECT CONCAT(‘姓名:’,studentname) AS 新姓名 FROM student;

    #查询所有学号—加了 去除重复项 (DISTINCT ,默认all all和DISTINCT相反) SELECT DISTINCT studentno FROM student;

    #select 查询中可以使用表达式 SELECT @@auto_increment_increment; #自增的步长 SELECT VERSION(); # mysql版本号 SELECT 1003-1 AS 计算结果; #查询 1003-1的 计算结果 是多少

    #地址集体加1 SELECT studentno,address+1 AS ‘加完之后的地址’ FROM student;

    #满足条件的查询(where) #模糊查询 ( AND 和 && 作用一样 ) SELECT studentno,gradeid FROM student WHERE gradeid BETWEEN 1 AND 3;

    #精确查询 SELECT studentno,gradeid FROM student WHERE studentno=1001;

    #除了1001之外的 SELECT studentno,gradeid FROM student WHERE studentno!=1001;

    #也可以这样写 SELECT studentno,gradeid FROM student WHERE NOT studentno=1001;

    #模糊查询 between and\ like \in \ null #查询姓李的同学的学号及姓名 #like 结合使用的% (0到任意个字符) _ (代表一个字符) SELECT studentno,studentname FROM student WHERE studentname LIKE ‘姓%’;

    #名字中只有一个字比如 : 马武 #一个 _ 代表一个字 也可以两个 __ SELECT studentno,studentname FROM student WHERE studentname LIKE ‘姓_’;

    #按有 姓 字 查询 SELECT studentno,studentname FROM student WHERE studentname LIKE ‘%姓%’;

    #模糊查询 SELECT studentno,studentname FROM student; #like & _

    #转义符号 % SELECT studentno,studentname FROM student WHERE studentname LIKE ‘%%%’;

    #转义符号\ 能不能使用我自己定义的转义符(:)呢? #可以 但是要加上 ESCAPE ‘:’ SELECT studentno,studentname FROM student WHERE studentname LIKE ‘%:%%’ ESCAPE ‘:’;

    #模糊查询 in SELECT studentno,studentname FROM student WHERE studentno IN (1001,1002,1000);

    #连接查询 : 利用表和表之间的关系,可以查到多个不同表中的数据

    #内连接用的是 inner join 查询两个表中的结果中的交集 #内连接用的是 outer join

    #左外连接 left join 以左表作为基准,右边表来一一匹配,匹配不上的,返回左表的记录,右表以null填充

    #右外连接 right join 以右表作为基准,左边表来一一匹配,匹配不上的,返回右表的记录,左表以null填充 #自连接

    #等值连接 非等值连接

    #思路 1先要知道用那几个表 2在确定用哪一种连接查询方式 #内连接语法 SELECT student.studentno,studentname FROM student INNER JOIN grade ON grade.gradeid=student.studentno;

    #左外连接 left join SELECT student.studentno,studentname FROM student LEFT JOIN grade ON grade.gradeid=student.studentno;

    #右外连接 SELECT student.studentno,studentname FROM student RIGHT JOIN grade ON grade.gradeid=student.studentno;

    #等值连接 SELECT student.studentno,studentname FROM student student,grade WHERE grade.gradeid=student.studentno;

    #非等值连接 返回的是左边表里的行数乘以右边表里的行数

    #返回两个日期的天数 SELECT DATEDIFF(NOW(),‘1997-10-31’)

    Processed: 0.011, SQL: 9