精华内容
下载资源
问答
  • like模糊查询 limit分页 like模糊查询 limit 分页 分组查询 having 和 where 的区别 多表查询(可以理解成在笛卡尔集的基础上进行条件筛选) 内连接(本质就是在笛卡尔集上加条件) 外连接 查询 左外连接 右外连接 子...

    创建表

    CREATE TABLE tb_user(
       id INT PRIMARY KEY AUTO_INCREMENT,
       username VARCHAR(20),
       password VARCHAR(20),
       girl_friend VARCHAR(20)
    )
    

    基本增删查改

    select * from 表名 where 条件;
    insert into 表名 values(数据);
    delete from 表名 where 条件;
    update <表名> set <列名=更新值> [where <更新条件>]

    查询专题

    在查询中使用as进行重命名 或者 直接空格

    select Personname as ps from a where xingbie=‘男’

    select * from category c,products p where c.cid = p.category_id;

    查询返回限制行数(关键字:top percent)

    select top 6 name from a
    显示列name的前6行,top为关键字
    select top 60 percent name from a
    显示列name的60%,percent为关键字

    查询排序(关键字:order by , asc , desc)

    select name from a where chengji>=60 order by desc
    asc升序,desc降序

    使用between在某个范围内进行查询

    select * from a where nianling between 18 and 20

    使用in在列举值内进行查询

    select name from a where address in (‘北京’,‘上海’,‘唐山’)
    查询表a中address值为北京或者上海或者唐山的记录

    like模糊查询 limit分页

    Select * from person where name like “%长沙%” limit 0,20

    like模糊查询

    模糊查询 dname like " % 张%"
    查的张某某 或者 xx张xx

    limit 分页

    limit N,M
    N:从哪一行开始(初始从0开始,不是1), M:每一页的行数
    page 第几页
    N=(page-1)*M
    比如 第二页 N=(2-1)*M

    分组查询

    查询工资大于2000的,工资总和大于9000的部门名称以及工资和
    select deparmant,GROUP_CONCAT(salary), SUM(salary) from employee
    WHERE salary > 2000
    GROUP BY deparmant
    HAVING sum(salary) > 9000
    ORDER BY SUM(salary) DESC;

    使用group by进行分组查询,使用having子句进行分组筛选
    having 和 where 一样,但 having 只能用于 group by

    having 和 where 的区别

    having 是在分组后对数据进行过滤,where 是在分组前对数据进行过滤
    having后面可以使用分组函数(统计函数),where后面不可以使用分组函数
    where 是对分组前记录的条件,如果某行记录没有满足where字句的条件,那么这行记录不会参加分组;而having是对分组后数据的约束

    多表查询(可以理解成在笛卡尔集的基础上进行条件筛选)

    内连接(本质就是在笛卡尔集上加条件)

    隐式内连接:select * from A,B where 条件;
    显式内连接:select * from A inner join B on 条件;(效率更高)
    区别
    》使用关键字 inner join
    》前者在笛卡尔集的基础上筛选,后者在原始表上筛选

    隐式内连接:select * from A,B where 条件;
    
    select * from category c,products p where c.cid = p.category_id;
    
    显式内连接:select * from A inner join B on 条件;(效率更高)
    
    select * from category c inner	join products p on c.cid = p.category_id;
    
    

    外连接 查询

    两个表中选一个表将数据全部输出,另一个表没有对应数据则输出NULL

    左外连接

    select * from A left outer join B on 条件;
    以左表为主,左表中的数据全部输出,右表中如果没有同等的数据则补NULL

    # 左外连接
    select * from province p left outer join city c on p.pid = c.pid_fk;
    
    

    右外连接

    select * from A right outer join B on 条件;
    以右表为主,右表中的数据全部输出,左表中如果没有同等的数据则补NULL

    # 右外连接
    select * from province p right outer join city c on p.pid = c.pid_fk;
    

    子查询

    select的嵌套:一个select的查询结果作为另一个select查询语法的一部分

    select * from product where cid = 1
    select cid from category where cname='电子'
    
    select *from product where cid = (select cid from category where cname='电子')
    

    一对多

    create database day13_2
    use day13_2
    》创建主表(分类表)
    create table category(
    	cid int primary key auto_increment,
    	cname varchar(20)
    )
    》创建从表(商品表)
    create table product(
    	pid int primary key auto_increment,
    	pname varchar(20),
    	price double,
    	cid int -- 外键 表示属于哪个分类
    )
    》给主表和从表之间添加外键约束 
    `alter table 从表 add [constraint] [外键名称] foreign key (从表外键字段名) references 主表 (主表的主键);`
    alter table product add  foreign key (cid) references category(cid)
    》给主表添加数据(随便添加)
    insert into category value(null,'电子')
    insert into category value(null,'服装')
    》给从表添加数据(添加数据是必须依赖主表)
    insert into product value(null,'联想',2000,1)
    insert into product value(null,'华为',4000,1)	
    insert into product value(null,'真维斯',100,2)	
    

    like模糊查询 limit分页

    Select * from person where name like “%长沙%” limit 0,20

    like模糊查询

    模糊查询 dname like " % 张%"
    查的张某某 或者 xx张xx

    limit 分页

    limit N,M
    N:从哪一行开始(初始从0开始,不是1), M:每一页的行数
    page 第几页
    N=(page-1)*M
    比如 第二页 N=(2-1)*M

    展开全文
  • 模糊查询知识点: like %表示任意字符串1. 查询姓’猴’的学生名单 猴%2.查询姓名中最后一个字是’猴’的学生名单 %猴3. 查询姓名中带’猴’的学生名单 %猴%4.查询姓“孟”老师的个数 count()二. 汇总分析分析方法...

    一. 模糊查询

    知识点: like %表示任意字符串

    1. 查询姓’猴’的学生名单 猴%

    e0617223e775844a5d0d31a662009cf5.png

    2.查询姓名中最后一个字是’猴’的学生名单 %猴

    f5c7997c242e32b8ea0843a61721139c.png

    3. 查询姓名中带’猴’的学生名单 %猴%

    f74d389f6a703547c2106af7e52d8f92.png

    4.查询姓“孟”老师的个数 count()

    0a933eda58f0cdd97226c34d60f67880.png

    二. 汇总分析

    分析方法:遇到问题---理解问题---逐步理清思路---写出SQL语句

    知识点:汇总函数,分组,对分组指定结果,排序的应用

    1. 查询课程编号是0002的总成绩

    8dc95c8f3fc1f1e58e1cdd8f8b26492d.png

    2.查询选了课程的学生人数

    dd31003350a7ff8ee18edd61057f372e.png

    3.查询各科成绩最高,最低分,显示课程号,最高分和最低分

    b91b4af1ef35e0a74485751781f621ec.png

    4. 查询每门课程被选修的学生数

    861a081ad704df63623af3d443836427.png

    5.查询男生,女生人数

    5c15f919ea623b204296fc961e3ff325.png

    6.查询平均成绩大于60分学生的学号

    626e9a91f8dbf19f3e33c603b818e9f5.png

    7.查询至少选修两门课程的学生学号

    f76ea7320ac5b9a7b4a42580f5382a77.png

    8.查询同名同姓(相同姓名)学生名单并统计同名人数

    5bd8f86e42b048dc614485fe4b8a0522.png

    9.查询不及格的课程并按课程号从大到小排列

    7e7d41ae3b97abef1085df2b1e44b988.png

    10.查询每门课程的平均成绩,结果按平均成绩升序排序,平均成绩相同时,按课程号降序排列

    91e0645bcb0af02e355570bee17c3858.png

    11.检索课程编号为“0004”且分数小于60的学生学号,结果按按分数降序排列

    eeb1f4f6a7a9826557c901139bea35dc.png

    12.统计每门课程的学生选修人数(超过2人的课程才统计)要求输出课程号和选修人数,查询结果按人数降序排序,若人数相同,按课程号升序排序

    3e956134606955ad5ca409022a3d04a0.png

    13.查询两门以上不及格课程的同学的学号,以及不及格课程及的平均成绩

    cab93624d252baf5f79f0b63a170bfe4.png

    三.复杂查询---子查询应用

    1.查询所有课程成绩小于60分学生的学号、姓名

    5309c52f7ea6d585075300d53300e078.png

    2.查询没有学全所有课的学生的学号、姓名

    d7322e3f6f67066fc25d5dbad389be74.png

    3.查询出只选修了两门课程的全部学生的学号和姓名

    4acb3b21f8fcc3862ed579463ebd380f.png

    4.查询1990年出生的学生名单

    6b2a0153c939c913f1da884c50a24d0f.png

    四.分组取每组最大值、最小值,每组最大的N条(top N)记录--关联子查询

    1.按课程号分组取成绩最大值所在行的数据

    19331e31761a41a19b1a492ab5a29dd3.png

    2.按课程号分组取成绩最小值所在行的数据

    a94fdef1e432e6c16dd0d8c7f25cb35e.png

    3.查询各科成绩前两名的记录

    86be5a7daf764e4ce2de142c78a3aee7.png

    五.多表查询

    8750cfa40fcebe0d9746fd0a874d38bb.png

    1.查询所有学生的学号、姓名、选课数、总成绩

    ca971f6be5d31029cea54817cccda883.png

    2.查询平均成绩大于85的所有学生的学号、姓名和平均成绩

    2ff54751a8331a7e475487f6a4613692.png

    3.查询学生的选课情况:学号,姓名,课程号,课程名称

    64bffc5e103ac02be8a64d1e64fcf0e1.png

    4.查询出每门课程的及格人数和不及格人数---case表达式

    8950511057f33507dac554ff26e3633f.png

    5.使用分段[100-85],[85-70],[70-60],[‹60]来统计各科成绩,分别统计:各分数段人数,课程号和课程名称

    fdb08ffdcd345e6c39bf63dace2972fc.png

    六.用SQL实现行业转换

    原表:

    cf80cd85fea3fbd37e7d4a8ddee8b255.png

    转换后效果:

    c9fd840ec7c7da6a4a0a6ac4f5ada1d3.png

    fe9c2b3c3ee79ae344146cbbf16eed77.png

    七.如何提高SQL效率

    1. select子句中尽量避免使用*

    select子句中,*是选择全部数据的意思,数据量大的时候,会增加运行时间

    2. where子句比较符号左侧避免函数

    尽量避免在where条件子句中,比较符号的左侧出现表达式、函数等操作。因为这会导致数据库引擎进行全表扫描,从而增加运行时间。

    3. 尽量避免使用in和not in

    in和not in也会导致数据库进行全表搜索,增加运行时间。可以用between优化

    4. 尽量避免使用or

    or同样会导致数据库进项全表搜索,可以使用union来优化

    5.使用limit子句限制返回的数据行数

    展开全文
  • select * from employees; select * from employees where salary = 10000;...select *from employeeswhere first_name like 'D%' or first_name like 'E%'; select * from employees where first_name ...

    select * from employees;

    select * from employees where salary = 10000;

    select *
    from employees
    where first_name like 'D%'
    or first_name like 'E%';

    select * from employees where first_name like '%a%';

    select * from employees where salary between 10000 and 20000;

    select first_name || ' ' || last_name 姓名
    from employees
    where salary between 10000 and 20000;

    select first_name || ' ' || last_name
    from employees
    where salary between 10000 and 20000;

    select * from employees here salary between 10000 and 20000;

    select *
    from employees
    where first_name = 'Pat'
    union
    select *
    from employees
    where first_name = 'Lex'
    union
    select *
    from employees
    where first_name = 'Lisa';

    select emp.*
    from employees emp,
    departments dep,
    locations loc
    where emp.department_id = dep.department_id
    and dep.location_id = loc.location_id
    and loc.city = 'Seattle';

    select first_name || last_name from employees where salary > 12000;

    select first_name || ' ' || last_name from employees where salary > 12000;

    select *
    from employees
    where salary < 20000
    and salary > 10000;

    select * from employees where salary between 10000 and 20000;

    select first_name,
    last_name,
    emp.salary,
    dep.department_name
    from employees emp,
    departments dep
    where emp.department_id = dep.department_id
    and emp.salary > 10000;

    select emp.*
    from employees emp,
    departments dep,
    locations loc,
    countries cou
    where emp.department_id = dep.department_id
    and dep.location_id = loc.location_id
    and loc.country_id = cou.country_id
    and cou.country_name = 'United States of America';

    select * from countries;
    select * from employees;
    select * from locations;
    select * from departments;

    drop user lhq;
    create user lhq identified by lhq123456;
    grant dba to lhq;
    grant connect, resource to lhq;
    alter user sys identified by sysdba;
    grant sysdba to lhq;

    select emp.first_name userName,
    man.first_name Manager
    from hr.employees emp,
    hr.employees man
    where emp.employee_id = man.manager_id
    order by Manager asc;

    select emp.first_name userName,
    dep.department_name Department
    from hr.departments dep
    left join hr.employees emp
    on emp.department_id = dep.department_id;

    select * from hr.countries;
    select * from hr.employees;
    select * from hr.locations;
    select * from hr.departments;
    select * from hr.jobs;

    --1、查询所有员工的员工 姓名、部门名称、工作国家、工作地区、工作名称
    select emp.first_name || ' ' || emp.last_name 姓名,
    dep.department_name 部门名称,
    loc.city 工作地区,
    cou.country_name 工作国家,
    job.job_title 工作名称
    from hr.employees emp
    full join hr.departments dep
    on emp.department_id = dep.department_id
    full join hr.locations loc
    on dep.location_id = loc.location_id
    full join hr.countries cou
    on loc.country_id = cou.country_id
    full join hr.jobs job
    on emp.job_id = job.job_id
    where emp.first_name is not null
    order by 姓名;

    select emp.first_name || ' ' || emp.last_name 姓名,
    dep.department_name 部门名称,
    loc.city 工作地区,
    cou.country_name 工作国家,
    job.job_title 工作名称
    from hr.employees emp
    left join hr.departments dep
    on emp.department_id = dep.department_id
    left join hr.locations loc
    on dep.location_id = loc.location_id
    left join hr.countries cou
    on loc.country_id = cou.country_id
    left join hr.jobs job
    on emp.job_id = job.job_id
    order by 姓名;
    --2、查询所有薪资大于一万的员工以及其领导和部门
    select emp.first_name || ' ' || emp.last_name 员工,
    man.first_name || ' ' || man.last_name 领导,
    dep.department_name 部门,
    emp.salary 薪水
    from hr.employees emp
    left join hr.employees man
    on emp.manager_id = man.employee_id
    left join hr.departments dep
    on emp.department_id = dep.department_id
    where emp.salary >= 10000
    order by 领导 asc;

    select hr.emp.*,
    man.first_name 领导,
    dep.department_name
    from hr.employees emp
    left join hr.employees man
    on emp.manager_id = man.employee_id
    left join hr.departments dep
    on emp.department_id = dep.department_id
    where emp.salary >= 10000;
    --3、查询所有有员工的部门
    select emp.first_name || ' ' || emp.last_name 员工姓名,
    dep.department_name 部门
    from hr.employees emp
    right join hr.departments dep
    on dep.department_id = emp.department_id
    where emp.department_id is not null
    order by 部门;

    select dep.department_id,
    dep.department_name,
    count(*)
    from hr.employees emp,
    hr.departments dep
    where emp.department_id = dep.department_id
    group by dep.department_id,
    dep.department_name;

    select dep.department_id,
    dep.department_name,
    count(emp.employee_id)
    from hr.departments dep
    left join hr.employees emp
    on dep.department_id = emp.department_id
    group by dep.department_id,
    dep.department_name
    having count(emp.employee_id) > 0;
    --4、查询所有没有员工的部门
    select emp.first_name || ' ' || emp.last_name 员工姓名,
    dep.department_name 部门
    from hr.employees emp
    right join hr.departments dep
    on dep.department_id = emp.department_id
    where emp.first_name is null
    order by 部门 asc;

    select dep.department_id,
    dep.department_name,
    count(emp.employee_id)
    from hr.departments dep
    left join hr.employees emp
    on dep.department_id = emp.department_id
    group by dep.department_id,
    dep.department_name
    having count(emp.employee_id) = 0;
    --5、查询所有在98~2000年入职的员工
    select emp.first_name || ' ' || emp.last_name 姓名,
    emp.hire_date 入职日期
    from hr.employees emp
    where emp.hire_date < to_date('2000-1-1', 'yyyy-mm-dd')
    and emp.hire_date > to_date('1998-1-1', 'yyyy-mm-dd')
    order by 入职日期 asc;

    select *
    from hr.employees
    where hire_date between '1-1月-1998' and '1-1月-2000';
    --6、查询所有部门以及部门领导
    select emp.first_name || ' ' || emp.last_name 领导姓名,
    dep.department_name 部门名称
    from hr.employees emp
    right join hr.departments dep
    on dep.manager_id = emp.employee_id
    order by 领导姓名 desc;

    select *
    from hr.departments dep
    left join hr.employees emp
    on dep.manager_id = emp.employee_id;
    --7、查询所有平均工资大于8000的部门
    select dep.department_name 部门,
    avg(emp.salary) 部门平均工资
    from hr.employees emp
    right join hr.departments dep
    on emp.department_id = dep.department_id
    group by dep.department_name
    having avg(emp.salary) >= 8000;
    --8、查询每个部门最高工资和最低工资是多少
    select dep.department_name 部门,
    max(emp.salary) 部门最高工资
    from hr.employees emp
    right join hr.departments dep
    on emp.department_id = dep.department_id
    group by dep.department_name
    having avg(emp.salary) > 0;
    --9、查询每个国家有多少个员工
    select cou.country_name 国家,
    count(*) 员工数
    from hr.employees emp
    left join hr.departments dep
    on emp.department_id = dep.department_id
    left join hr.locations loc
    on dep.location_id = loc.location_id
    right join hr.countries cou
    on loc.country_id = cou.country_id
    group by cou.country_name
    order by 国家;
    --10、查询每个部门总工资是多少
    select dep.department_name 部门,
    sum(emp.salary) 部门平均工资
    from hr.employees emp
    right join hr.departments dep
    on emp.department_id = dep.department_id
    group by dep.department_name
    having avg(emp.salary) > 0;
    --11、查询工资大于12000的员工姓名和工资
    select emp.first_name || ' ' || emp.last_name 员工姓名,
    emp.salary 工资
    from hr.employees emp
    where salary > 12000;
    --12、查询员工号为176的员工的姓名和部门号
    select emp.first_name || ' ' || emp.last_name 员工姓名,
    emp.department_id
    from hr.employees emp
    where emp.employee_id = 176;
    --13、选择工资不在5000到12000的员工的姓名和工资
    select emp.first_name || ' ' || emp.last_name 员工姓名,
    emp.salary 工资
    from hr.employees emp
    where salary < 5000
    or salary > 12000;
    --14、选择雇用时间在1908-02-01到1908-05-01之间的员工姓名,job_id和雇用时间
    select emp.first_name || ' ' || emp.last_name 员工姓名,
    emp.job_id 员工号,
    emp.hire_date 雇用时间
    from hr.employees emp
    where emp.hire_date between '31-1月-1998' and '2-5月-1998';
    --15、选择在20、50号部门工作的员工姓名和部门号
    select emp.first_name || ' ' || emp.last_name 员工姓名,
    emp.department_id
    from hr.employees emp
    where emp.department_id = 20
    or emp.department_id = 50;
    --16、选择在1908年雇用的员工的姓名和雇用时间
    select emp.first_name || ' ' || emp.last_name 员工姓名,
    emp.hire_date 雇用时间
    from hr.employees emp
    where emp.hire_date between '31-12月-1997' and '1-1月-1999';
    --17、选择公司中没有管理者的员工姓名及job_id
    select emp.first_name || ' ' || emp.last_name 员工姓名,
    emp.job_id 员工号
    from hr.employees emp
    where emp.manager_id is null;
    --18、查询员工姓名的第三个字母是a的员工姓名
    select emp.first_name || ' ' || emp.last_name 员工姓名
    from hr.employees emp
    where emp.first_name like '__a%';
    --19、查询每一个工种的人数
    select emp.job_id 工作类别,
    count(*) 员工数
    from hr.employees emp
    group by emp.job_id
    having count(*) > 0;
    --20、查询每一个领导手下的员工数量并排序
    select emp.manager_id 领导,
    count(*) 员工数
    from hr.employees emp
    group by emp.manager_id
    having count(*) > 0
    order by 领导;

    select * from hr.jobs;
    select * from hr.countries;
    select * from hr.employees;
    select * from hr.locations;
    select * from hr.departments;

    create table customers(customers_id number(10) primary key,
    customers_account varchar2(20) not null unique,
    customers_password varchar2(18) not null,
    customers_name varchar2(30),
    customers_gender varchar2(6),
    customers_birth date not null,
    customers_phone number(11) not null,
    customers_mail varchar2(30),
    customers_address varchar2(18) not null);

    create table orderdetail(

    orderdetail_id number(10) primary key,
    goods_serialnum number(10) not null unique,
    goods_num number(10) not null,
    goods_price number(10, 2) not null,
    customers_id number(10),
    foreign key(customers_id) references
    customers(customers_id));

    create SEQUENCE test_sequence INCREMENT by 1  start
    with 10000    NOMAXVALUE NOCYCLE  CACHE 10;

    insert into customers
    values
    (test_sequence.nextval, 'Dream68686868', '8888-6666', 'ycr', 'female',
    to_date('21-08-2003', 'DD-MM-YYYY'), 13886868987, '123456@qq.mail',
    'ChinaJiangSu');

    select * from orderdetail;
    select * from customers;
    select test_sequence.Currval from dual;

    drop table orderdetail;
    drop table customers;
    drop SEQUENCE test_sequence;

    alter table orderdetail rename column orderdetail to orderdetail_id;

    ------------------------------------------------------------------------------------------------------

    create table emp(emp_id number(10),
    first_name varchar2(20),
    last_name varchar2(20),
    salary number(10));

    create table interest(interestId number(10) primary key,
    interest varchar2(20) unique);

    create table users(userId number(10) primary key,
    USERNAME varchar2(20),
    PASSWORD varchar2(20),
    GENDER varchar2(20),
    CITY varchar2(20),
    TEXT varchar2(20));

    create table users_interest(interestId number(10),
    userId number(10),
    primary key(interestId, userId), --联合主键,当联合主键不同时和其让数据相同时,那么就不算主键重复
    foreign key(interestId) references
    interest(interestId),
    foreign key(userId) references users(userId));

    create SEQUENCE user_users INCREMENT by 1  start
    with 10000    NOMAXVALUE NOCYCLE  CACHE 10;

    select * from interest;
    select * from users;
    select * from users_interest;
    select * from emp;

    drop table emp;
    drop table users_interest;
    drop table users;
    drop table interest;
    drop SEQUENCE user_users;

    insert into emp value
    (select emp.employee_id,
    emp.first_name,
    emp.last_name,
    emp.salary
    from hr.employees emp);

    insert into users
    values
    (user_users.nextval, 'lu', '123', 'male', 'nanjing', 'aaaa');
    insert into users
    values
    (user_users.nextval, 'zhao', '123', 'female', 'guizhou', 'bbbb');
    insert into users
    values
    (user_users.nextval, 'qian', '123', 'female', 'beijing', 'cccc');
    insert into users
    values
    (user_users.nextval, 'sun', '123', 'male', 'changzhou', 'dddd');
    insert into users
    values
    (user_users.nextval, 'li', '123', 'female', 'suzhou', 'eeee');

    insert into interest values (1, '哭');
    insert into interest values (2, '玩');
    insert into interest values (3, '闹');
    insert into interest values (4, '蹦');
    insert into interest values (5, '跳');
    insert into interest values (6, '跑');
    insert into interest values (7, '睡');
    insert into interest values (8, '吃');
    commit;
    rollback;


    drop user lu;
    create user lu identified by lu123456;
    grant sysdba to lu;
    grant dba to lu;

    转载于:https://www.cnblogs.com/Dream-Lasting/p/4184381.html

    展开全文
  • 多条件模糊查询表单查询是以数据存储管理为基础的信息管理系统各业务功能实现的基础,也是数据库CRUD操作的重点与难点,尤其是多表连接查询、条件查询、分组查询、聚合函数等的综合应用。本文以某一比赛样式要求为...
    c621e7333c0e3379046f98cefc5b4c26.png

    多条件模糊查询

    表单查询是以数据存储管理为基础的信息管理系统各业务功能实现的基础,也是数据库CRUD操作的重点与难点,尤其是多表连接查询、条件查询、分组查询、聚合函数等的综合应用。本文以某一比赛样式要求为基础,对数据表多条件模糊查询进行分析与实现说明,为数据库SQL初学者提供参考。


    问题描述

    多条件模糊查询需求来于项目开发需求,本项目提供信息查询页面如下所示,开发者需要为用户提供多条件模糊查询,具体需求描述如下:

    1b3110dc5d8f165144caecc26e64e5f7.png

    问题需求

    1、能够实现多条件查询,即用户输入用户名、车辆品牌、车架号等条件实现会员信息的检索功能。多条件能够允许部分或者全部条件为空,如全部条件为空则显示会员信息表全部信息。

    2、能够实现模糊查询,即用户输入条件为字段值的一部分,能够检索出包含该字段值的所有信息。如可同时输入姓名关键字李,品牌关键字安,车架号关键字A,即可检索出对应字段包含关键字的记录。支持部分搜索条件为空。


    解决思路

    该需求为条件查询与模糊查询的组合,解决问题的关键在于编写出符合条件的sql查询语句。主要所需解决问题包括以下方面:

    1、条件筛选与多条件

    在SQL数据查询语句中,我们一般通过where条件实现对记录进行筛选,如需要满足多个条件,需要使用逻辑运算符and 和or,其中and是指逻辑与,即同时满足条件,or为逻辑或运算。本例提供多个条件进行查询需要使用逻辑与运算符,即and。

    2、字符匹配查询like

    模糊查询主要借助SQL提供的字符匹配查询功能,通过like与匹配字符串进行对比,找到符合条件的记录。like语句关键内容为通配符的使用,常用通配符包括_与%。其中%表示任意多个任意字符。因此如果查询要求包含某个关键字假设为“头”。则匹配字符描述为"%头%"。

    3、其他问题

    出编写出符合条件的查询语句之外,本例实现过程还需注意当某一个条件用户输入为空时,怎么去编写查询语句。程序执行过程是需要动态根据用户是否填写信息,构造查询语句。完整语句结构应该为where condition 1 and condition2 and condition3。为保证语句结构的统一,我们将用户输入为空时的条件设置为1=1。即恒成立条件。这样统一了所有情况查询语句的结构。如我们不填写车辆品牌搜索信息,构造查询语句如下:

    5b711b45589c239d6c006e99a6e0dab8.png

    查询语句统一结构形式


    实现与测试

    在明确项目任务、所需技术方法等基础上我们可以完成本例开发。本例使用WinForm框架进行开发,前端通过datagridview进行数据的绑定及展示。此部分实现过程不再一一描述,如需完整案例代码关注并私信作者。后台数据表实现描述如下:

    3ca0b7d92141a931fde31f5f8e27d340.png

    数据表userinfor结构描述

    687f4f64d60983c94929f66a343654d7.png

    存储测试数据

    数据表结构及测试数据描述如上图所示,在winForm中设计窗体,定义初始化函数,并编写对应查询按钮点击事件,其中设计窗体如下:

    06340c270a94d3f226c9248481a06eb0.png

    项目窗体设计图

    其中多条件模糊查询部分主要在查询按钮点击事件中编写,部分实现代码描述如下图所示:

    120b020556ac135bc811eb0246c07335.png

    点击鼠标实现多条件模糊查询代码

    实现SQL多条件模糊查询代码如上所示,本例完整测试功能实现描述如下动图所示:

    e69297700c06d60502733c3179dfd8bb.gif

    动态展示


    本头条号长期关注编程资讯分享;编程课程、素材、代码分享及编程培训。如果您对以上方面有兴趣或代码错误、建议与意见,可以联系作者,共同探讨。期待大家关注!相关文章链接如下:

    数据库教程-SQL Server查询结果列转行实现与分析

    数据库教程-SQL Server数据字典查询及导出

    展开全文
  • 时间:2017-09-29 整理:byzqy 本篇仍以“梁山好汉”数据表为例,介绍几个常用的 T-SQL 查询语句: ...分组查询,关键字:group by 使用函数,关键字:max、avg 规定要返回的记录的数目,关键字...
  • 1 use StudentManageDB 2 go 3 select StudentName,StudentAddress from Students ... 4 where StudentAddress like '天津%' 5 6 select StudentName,StudentAddress from Students 7 where StudentN...
  • 文章目录MySQL数据库(一:概念 DDL DML DQL 模糊查询 字段控制 排序 聚合函数 分组查询 分页limit)服务器:提供某种服务的计算机 它是硬件与软件的组合概念指令SQL细分SQLDDL建表!! 字段的名称 不要使用mysql...
  • 1.报错信息 因为默认开了ONLY_FULL_GROUP_BY这个属性,和想要执行的group by 方式相冲突 MySQL 8.0.21 2.查看mysql版本信息 ...set sql_mode=’STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_
  • 逻辑运算10.order by 子句排序案例(排序查询)三、分组查询1.概念2.组函数类型分组函数练习3.Group by子句4.非法使用组函数5.过滤分组Having 子句 前言 SQL语句比较多,需要好好理解。 一、基本的select语句 1
  • SQL查询语句基于MYSQL学习笔记模糊查询like分组:group by数据处理查询与子查询jion查询回顾 本例是基于mysql的SQL语句查询,在mysqlworkbench进行。 模糊查询like分组:group by 模糊查询: SELECT * ...
  • 聚合函数,模糊查询like,通配符.空值处理.order by排序.分组group by-having.类型转换-cast,Convert.union all; Select 列 into 新表;字符串函数;日期函数 SQL聚合函数 MAX(最大值)、MIN(最小值)、AVG(平均值)、SUM...
  • SQL数据库——查询SQL数据库——查询前期准备,建造练习用数据库条件查询比较运算符逻辑运算符模糊查询likerlike范围查询空判断排序聚合函数分组分页 SQL数据库——查询 前期准备,建造练习用数据库 -- 创建一个...
  • SQL学习笔记,多表查询,左右外连接,数据库设计的三范式SQL语句书写顺序基础查询别名查询(as可以省略)去重关键字 distinct模糊查询查询之间 从小到大null值参与运算条件查询:运算符:like 模糊查询分组查询排序查询聚合...
  • SQL语法之查询语句

    2015-08-12 01:37:45
    @(笔记)[MarkDown|我的博客|数据库]SQL语法之查询语句 ...like模糊匹配 条件组合查询 比较运算符和逻辑运算符的优先级 查询结果排序 多表查询 合并结果集 连接查询 内连接 自然连接 外连接 左外连接
  • MySQL-模糊查询

    2019-09-25 01:02:37
    现在一个公司表,有各种类型的公司,但是一个公司又有很多类型标签,公司类别用char类型的数据格式1,2,3,4,不是int,开始的想法是先查,再用PHP进行分类,但是想想效率真的很差,各种判断+各种分组,最后就想在SQL上...
  • 6.4.4 使用TOP子句 6.4.5 NULL的判断 6.5 模糊查询 6.5.1 使用LIKE运算符进行查询 6.5.2 使用“_”通配符进行查询 6.5.3 使用“%”通配符进行查询 6.5.4 使用“[]”通配符进行查询 6.5.5 使用“[^]”通配符进行查询...
  • 模糊查询(**like ,between and,in, is null**)常用在where和having中二 函数1.单行函数1.1字符函数1.2数学函数1.3日期函数1.4其他函数1.5流程控制函数分组函数 一 查询 1. sql的启动与停止 ```sql 启动:...
  • 文章目录1、为表起别名as2、查询前n部分数据:top n 列名:表示查看前n行3、排序:order by 列名1 asc(升序)|desc(降序),列名1 asc|desc…4、消除重复行:distinct5、条件查询:写在where后面6、模糊查询:用于...
  • 1.常识基础 聚集函数不能出现在WHERE条件里面。 分组的时候group by ...2.模糊查询:select * from aa where a1 like 'a%'; 以a开头任意个字符结尾的。'a_'以a开头一个任意字符结尾的,如果有多个可以用多个'a__'。se
  • SQL常用语句

    2020-10-09 10:38:25
    文章目录SQL语句学习前言一、模糊查询二、汇总分析二、分组查询三.复杂查询 前言 之前只会写一些简单的增删查改sql语句,今天深入的学习下sql语句。 新建四个数据库。 student表: score表:stuId和courseId为...
  • sql优化

    2018-06-25 08:58:43
    sql优化:1.减少查询字段,减少*的使用2.exists替换in3.where优化 3.1 最具有限制性的条件放在最前面 3.2 字段顺序和索引中字段顺序保持一致 3.3 如果表记录超过20k,尽量不适用函数,...开头的like语句,模糊查询 4.2 ...
  • 基础SQL语句用法

    2018-09-19 11:21:00
    1、插入数据:Insert 2、更新数据:update 每行金额增加100 3、删除数据:delete 4、查询:select 1)精确查询 2)模糊查询:like 模糊查询 % 匹配 ...6、分组查询:Group by ...
  • T_SQL总结笔记

    2015-06-27 17:10:06
    T_SQL总结笔记 一 基本语法 新建数据库 插入数据insert 修改数据记录Update 删除 1Delete记录日志 2清空删除Truncate不记录日志 3删除表drop表和日志都删除 二运算符 三 通配符 ...单列分组查询 多列
  • SQL Server入门二

    2019-04-15 21:25:59
    二、模糊查询like 三、通配符:%,_,[],^ 1.%通配符:匹配0-n个任意字符 2._通配符,表示匹配任意1个字符 3.’^‘通配符:非,不是 4.’[]'通配符,表示匹配一定范围内的,任意1个字符 四、聚合函数 五、select 完整...
  • 排序 函数 分组

    2020-03-12 00:49:46
    SQL 条件查询 判断语句 判断条件: a)、= 、 >、 <、 >=、 <...b)、and 、or、 not、 union、 union all、 intersect 、minus c)、null :is null、 is not null、 not is...d)、like :模糊查询 % _ escape...
  • 我将对SQL进行一个总结,为了方便日后的面试复习【简单查询】基本查询语句select 选择输出字段from 摘自某表as 取别名(如果是中文需加引号)distinct 不输出重复值where 查询条注意一些模糊查询(如:like,%,-)...

空空如也

空空如也

1 2 3 4
收藏数 65
精华内容 26
关键字:

like模糊分组查询sql