How do I search two columns? - sql

I have a table with First Name, Last Name and Contact Number.
If user enters kar, then I want a full list with results containing kar in the First name or Last Name.

This assumes that kar is a portion of a name, if it is the full name, then do first_name = 'kar'
SELECT first_name, last_name, number
FROM your_phone_book
WHERE first_name LIKE '%kar%'
OR last_name LIKE '%kar%'

It's really rather simple:
SELECT * FROM directory
WHERE firstname LIKE '%kar%'
OR lastname LIKE '%kar%';

select firstname from table
where firstname like '%name%'

Related

How to get length of string using Oracle query

In a table I have columns FIRST_NAME and LAST_NAME. I have to concatenate the two names and retrieve names containing more than 12 characters.
I tried the following query:
select *
from (select first_name, last_name
from customer as name
)
where length(NAME) = 12
Select *
from (
select first_name||last_name as name
from customer
)
where length(name)>12
You need only one SELECT
SELECT first_name || last_name AS name
FROM customer
WHERE LENGTH(first_name||last_name) > 12
Optionally TRIM name and last_name from spaces.
As an alternative, if you rewrite your question to check if the total length of first name and last name is more than 12, you probably get a different response from people with a more efficient code. It is not necessary to make Oracle actually concatenate the columns.
Programmers are too literal these days. :)
You are not concatenating the first name and last name.
Also no need to write an inline view, below is the query.
select FIRST_NAME || LAST_NAME as NAME
from CUSTOMER
where length(FIRST_NAME || LAST_NAME) > 12;

SQL checking the last letter in string / AKA LIKE strange behaviour

I know it was already answered but it doesn't work for me.
So quick introduce:
I have table called swimmers. I'll insert new record to it which fulfils all columns:
INSERT INTO swimmers(id, first_name, last_name, age, gender)
VALUES(9,'Maria','Spolsky',34,'Female');
Now I want to find records in swimmers table which first_name DOES NOT end with letter a and where gender is Female
So I wrote SQL query:
SELECT first_name, last_name
FROM swimmers
WHERE first_name NOT LIKE '%a' AND gender = 'Female'
But it does return Maria which we just added. It basically returns every female
I'm using ORACLE iSQL plus.
EDIT:
I tried to use substr(first_name, -1) = 'a' but it turned out that -1 is empty, because I use varchar(20) and names are usually smaller than 20 characters
EDIT2:
I tried to find issue in data type. I used char(20) for first_name.
I changed it into varchar2(20):
ALTER TABLE swimmers
MODIFY first_name varchar2(20);
but didn't solve the issue
EDIT 3:
Changing NOT LIKE to WHERE first_name LIKE '%a' returns no rows. I believe issues lies inside data type and empty spaces from the end of the first_name to the end of reserved space for string (names has ~10 characters and I use `varchar2(20))
Appearantly oracles is adding spaces behind the name and that's why '%a' doesn't work, either change your column definition to a varchar (so oracle doesn't add the extra spaces) or trim the spaces out of your name like this:
SELECT first_name, last_name
FROM swimmers
WHERE NOT trim(first_name) LIKE '%a' AND gender = 'Female';

Basic SQL Query, I am newbie

I just started my database and query class on Monday. We met on Monday and just went over the syllabus, and on Wednesday the network at school was down so we couldn't even do the power point lecture. Right now I am working on my first homework assignment and I am almost finished but I am having trouble on one question.
Here is is...
Write a SELECT statement that returns one column from the Customers table named FullName that joins the LastName and FirstName columns.
Format the columns with the last name, a comma, a space, and the first name like this:
Doe, John
Sort the result set by last name in ascending sequence.
Return only the contacts whose last name begins with letters from M to Z.
Here is what I have so far...
USE md0577283
SELECT FirstName,LastName
FROM Customers
ORDER BY LastName,FirstName
My question is how do I format is Lastname, FirstName like the professor wants and how do I only select names M-Z?
If someone could point me in the right direction I would greatly appreciate it.
Thank you.
PS With all do respect, I didn't ask for the answer I asked for a nudge in the right direction so why the down vote guys?
USE md0577283
SELECT LastName + ', ' + FirstName FullName
FROM Customers
WHERE LastName LIKE '[M-Z]%'
ORDER BY LastName,FirstName
You want to add two things: create an expression to return the name in the requested format
(LastName + ", " + FirstName as Name)
USe a "where clause" to filter what is returned: where LastName >= "M" and LastName <= "Z" perhaps.
Simply write like this.
If you want to get names from m to z.
SELECT LastName, FirstName
FROM Customers
WHERE FirstName between 'M%' and 'Z%'
ORDER BY LastName, FirstName
If you want to get names from m and z only.
SELECT LastName, FirstName
FROM Customers
WHERE FirstName LIKE 'M%' OR FirstName LIKE 'Z%'
ORDER BY LastName, FirstName

SQL prompt to enter a letter that the last name starts with

The whole question is:
Rewrite the query so that the user is prompted to
enter a letter that the last name starts with. For example, if the user enters “H" (capitalized) when prompted for a letter, then the output should show all employees whose last name starts with the letter “H.”
SELECT last_name
FROM employees
WHERE last_name like '%' = &Start_Letter
This wont work :(
This query should work:
SELECT last_name FROM employees WHERE last_name like '&Start_Letter%';
I have tested it in Oracle11g.
SELECT last_name FROM employees WHERE last_name like &Start_Letter + '%';
Depending on the requirements of your particular application, a more efficient solution might be to create a function based index:
CREATE INDEX emp_start_letter_idx
ON employees ( substr( last_name, 1, 1 ) );
Then your query would be:
SELECT last_name
FROM employees
WHERE substr(last_name, 1, 1) = '&Start_Letter';
Likewise, depending on your requirements, this may be a lot of unnecessary fuss!

How Do I SELECT when needing to use LIKE and change column Name

Here is the problem I am working on:
Select all the Oracle database employees whose last names end with “s” Change the
heading of the column to read Possible Candidates.
I tried
SELECT last_name AS possible_candidates FROM * WHERE last_name LIKE '%s';
That returned the error :
ORA-00903: invalid table name
Unless I am reading the question wrong how do I check the entire database for something like this?
To answer the question which is asking for employee names not just last names you would select all employees with a last name that ends in S.
SELECT *
FROM employees
WHERE last_name LIKE '%s'
If the table has more than a first_name and last_name column you can do
SELECT first_name, last_name
FROM employees
WHERE last_name LIKE '%s'
Now to combine your two parts (Select employees and rename column)
Run one of the two queries above but add an AS statement as show in the example below.
SELECT *
AS Possible_Candidates
FROM employees
WHERE last_name LIKE '%s'
Based on feedback: this appears to be your answer...
Is there a table called employees? if that I would interpret the question as from the employees table. Otherwise, you could select table_name from All_TAB_COLS where column_name like = 'LAST_NAME' and then build a union from the resulting tables all of which have a field called 'LAST_NAME'